accept a nBytes argument for Parse()
diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index ab1fbb0..3415b8a 100644
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -1622,7 +1622,7 @@
}
-int XMLDocument::Parse( const char* p )
+int XMLDocument::Parse( const char* p, size_t len )
{
DeleteChildren();
InitDocument();
@@ -1631,6 +1631,13 @@
SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 );
return errorID;
}
+ if ( len == (size_t)(-1) ) {
+ len = strlen( p );
+ }
+ charBuffer = new char[ len+1 ];
+ memcpy( charBuffer, p, len );
+ charBuffer[len] = 0;
+
p = XMLUtil::SkipWhiteSpace( p );
p = XMLUtil::ReadBOM( p, &writeBOM );
if ( !p || !*p ) {
@@ -1638,11 +1645,6 @@
return errorID;
}
- size_t len = strlen( p );
- charBuffer = new char[ len+1 ];
- memcpy( charBuffer, p, len+1 );
-
-
ParseDeep( charBuffer, 0 );
return errorID;
}
diff --git a/tinyxml2.h b/tinyxml2.h
index a573f94..b64f289 100644
--- a/tinyxml2.h
+++ b/tinyxml2.h
@@ -1072,8 +1072,13 @@
Parse an XML file from a character string.
Returns XML_NO_ERROR (0) on success, or
an errorID.
+
+ You may optionally pass in the 'nBytes', which is
+ the number of bytes which will be parsed. If not
+ specified, TinyXML will assume 'xml' points to a
+ null terminated string.
*/
- int Parse( const char* xml );
+ int Parse( const char* xml, size_t nBytes=(size_t)(-1) );
/**
Load an XML file from disk.
diff --git a/xmltest.cpp b/xmltest.cpp
index 55300b8..7df8b47 100644
--- a/xmltest.cpp
+++ b/xmltest.cpp
@@ -947,6 +947,14 @@
XMLTest( "Non-alpha element lead letter parses.", doc.Error(), false );
}
+ {
+ const char* xml = "<element/>WOA THIS ISN'T GOING TO PARSE";
+ XMLDocument doc;
+ doc.Parse( xml, 10 );
+ //doc.Print();
+ XMLTest( "Set length of incoming data", doc.Error(), false );
+ }
+
// ----------- Whitespace ------------
{
const char* xml = "<element>"