From ddae497f7b19095d27c87b790388029ba4ead9c1 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 19 Apr 2006 09:38:54 +0000 Subject: [PATCH] fix off by one error in CharToString(); also simplified the conversion code a bit git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38838 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/xml/xml.cpp | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/xml/xml.cpp b/src/xml/xml.cpp index 619f93ab51..b812bb331d 100644 --- a/src/xml/xml.cpp +++ b/src/xml/xml.cpp @@ -365,29 +365,30 @@ bool wxXmlDocument::Save(const wxString& filename) const - process all elements, including CDATA */ -// converts Expat-produced string in UTF-8 into wxString. -inline static wxString CharToString(wxMBConv *conv, +// converts Expat-produced string in UTF-8 into wxString using the specified +// conv or keep in UTF-8 if conv is NULL +static wxString CharToString(wxMBConv *conv, const char *s, size_t len = wxSTRING_MAXLEN) { #if wxUSE_UNICODE - (void)conv; + wxUnusedVar(conv); + return wxString(s, wxConvUTF8, len); -#else +#else // !wxUSE_UNICODE if ( conv ) { - size_t nLen = (len != wxSTRING_MAXLEN) ? len : - wxConvUTF8.MB2WC((wchar_t*) NULL, s, 0); + // there can be no embedded NULs in this string so we don't need the + // output length, it will be NUL-terminated + const wxWCharBuffer wbuf( + wxConvUTF8.cMB2WC(s, len == wxSTRING_MAXLEN ? wxNO_LEN : len, NULL)); - wchar_t *buf = new wchar_t[nLen+1]; - wxConvUTF8.MB2WC(buf, s, nLen); - buf[nLen] = 0; - wxString str(buf, *conv, len); - delete[] buf; - return str; + return wxString(wbuf, conv); } - else + else // already in UTF-8, no conversion needed + { return wxString(s, len != wxSTRING_MAXLEN ? len : strlen(s)); -#endif + } +#endif // wxUSE_UNICODE/!wxUSE_UNICODE } struct wxXmlParsingContext -- 2.45.2