diff --git a/contrib/src/xrc/xml.cpp b/contrib/src/xrc/xml.cpp index 0382c121ec..62abce457a 100644 --- a/contrib/src/xrc/xml.cpp +++ b/contrib/src/xrc/xml.cpp @@ -538,8 +538,10 @@ bool wxXmlDocument::Load(wxInputStream& stream, const wxString& encoding) done = (len < BUFSIZE); if (!XML_Parse(parser, buf, len, done)) { + wxString error(XML_ErrorString(XML_GetErrorCode(parser)), + *wxConvCurrent); wxLogError(_("XML parsing error: '%s' at line %d"), - XML_ErrorString(XML_GetErrorCode(parser)), + error.c_str(), XML_GetCurrentLineNumber(parser)); ok = FALSE; break; @@ -548,10 +550,16 @@ bool wxXmlDocument::Load(wxInputStream& stream, const wxString& encoding) if (ok) { - SetVersion(ctx.version); - SetFileEncoding(ctx.encoding); + if (!ctx.version.IsEmpty()) + SetVersion(ctx.version); + if (!ctx.encoding.IsEmpty()) + SetFileEncoding(ctx.encoding); SetRoot(ctx.root); } + else + { + delete ctx.root; + } XML_ParserFree(parser); #if !wxUSE_UNICODE @@ -575,7 +583,7 @@ inline static void OutputString(wxOutputStream& stream, const wxString& str, { if (str.IsEmpty()) return; #if wxUSE_UNICODE - const wxWX2MBbuf buf(str.mb_str(convFile ? *convFile : wxConvUTF8)); + const wxWX2MBbuf buf(str.mb_str(*(convFile ? convFile : &wxConvUTF8))); stream.Write((const char*)buf, strlen((const char*)buf)); #else if ( convFile == NULL ) diff --git a/src/xrc/xml.cpp b/src/xrc/xml.cpp index 0382c121ec..62abce457a 100644 --- a/src/xrc/xml.cpp +++ b/src/xrc/xml.cpp @@ -538,8 +538,10 @@ bool wxXmlDocument::Load(wxInputStream& stream, const wxString& encoding) done = (len < BUFSIZE); if (!XML_Parse(parser, buf, len, done)) { + wxString error(XML_ErrorString(XML_GetErrorCode(parser)), + *wxConvCurrent); wxLogError(_("XML parsing error: '%s' at line %d"), - XML_ErrorString(XML_GetErrorCode(parser)), + error.c_str(), XML_GetCurrentLineNumber(parser)); ok = FALSE; break; @@ -548,10 +550,16 @@ bool wxXmlDocument::Load(wxInputStream& stream, const wxString& encoding) if (ok) { - SetVersion(ctx.version); - SetFileEncoding(ctx.encoding); + if (!ctx.version.IsEmpty()) + SetVersion(ctx.version); + if (!ctx.encoding.IsEmpty()) + SetFileEncoding(ctx.encoding); SetRoot(ctx.root); } + else + { + delete ctx.root; + } XML_ParserFree(parser); #if !wxUSE_UNICODE @@ -575,7 +583,7 @@ inline static void OutputString(wxOutputStream& stream, const wxString& str, { if (str.IsEmpty()) return; #if wxUSE_UNICODE - const wxWX2MBbuf buf(str.mb_str(convFile ? *convFile : wxConvUTF8)); + const wxWX2MBbuf buf(str.mb_str(*(convFile ? convFile : &wxConvUTF8))); stream.Write((const char*)buf, strlen((const char*)buf)); #else if ( convFile == NULL )