diff --git a/tinyxml2.cpp b/tinyxml2.cpp index d147ffe..6865d5e 100755 --- a/tinyxml2.cpp +++ b/tinyxml2.cpp @@ -2305,20 +2305,23 @@ void XMLDocument::SetError( XMLError error, int lineNum, const char* format, ... _errorLineNum = lineNum; _errorStr.Reset(); - if (format) { - size_t BUFFER_SIZE = 1000; - char* buffer = new char[BUFFER_SIZE]; - TIXML_SNPRINTF(buffer, BUFFER_SIZE, "Error=%s ErrorID=%d (0x%x) Line number=%d: ", ErrorIDToName(error), int(error), int(error), lineNum); - size_t len = strlen(buffer); + size_t BUFFER_SIZE = 1000; + char* buffer = new char[BUFFER_SIZE]; - va_list va; - va_start( va, format ); - TIXML_VSNPRINTF( buffer + len, BUFFER_SIZE - len, format, va ); - va_end( va ); + TIXML_SNPRINTF(buffer, BUFFER_SIZE, "Error=%s ErrorID=%d (0x%x) Line number=%d", ErrorIDToName(error), int(error), int(error), lineNum); - _errorStr.SetStr(buffer); - delete [] buffer; - } + if (format) { + size_t len = strlen(buffer); + TIXML_SNPRINTF(buffer + len, BUFFER_SIZE - len, ": "); + len = strlen(buffer); + + va_list va; + va_start(va, format); + TIXML_VSNPRINTF(buffer + len, BUFFER_SIZE - len, format, va); + va_end(va); + } + _errorStr.SetStr(buffer); + delete[] buffer; } diff --git a/xmltest.cpp b/xmltest.cpp index 91494ec..bb58986 100644 --- a/xmltest.cpp +++ b/xmltest.cpp @@ -567,6 +567,10 @@ int main( int argc, const char ** argv ) XMLDocument doc; doc.Parse( error ); XMLTest( "Bad XML", XML_ERROR_PARSING_ATTRIBUTE, doc.ErrorID() ); + const char* errorStr = doc.ErrorStr(); + XMLTest("Formatted error string", + "Error=XML_ERROR_PARSING_ATTRIBUTE ErrorID=8 (0x8) Line number=3: XMLElement name=wrong", + errorStr); } { @@ -1160,6 +1164,12 @@ int main( int argc, const char ** argv ) XMLDocument doc; doc.Parse( str ); XMLTest( "Empty document error", XML_ERROR_EMPTY_DOCUMENT, doc.ErrorID() ); + + // But be sure there is an error string! + const char* errorStr = doc.ErrorStr(); + XMLTest("Error string should be set", + "Error=XML_ERROR_EMPTY_DOCUMENT ErrorID=15 (0xf) Line number=0", + errorStr); } {