fix error string output when there is no formatting
diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index d147ffe..6865d5e 100755
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -2305,20 +2305,23 @@
_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 @@
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 @@
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);
}
{