Make code more defensive
* initialize out-parameter for cases the callee fails to
* add assert for length being within range
* replace post-assert with pre-assert
Also replace the loop with an equivalent memcpy() call
diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index 4efc768..86090d6 100755
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -216,13 +216,14 @@
// 中 or 中
if ( *(p+1) == '#' ) {
- char buf[10] = { 0 };
- int len;
+ const int buflen = 10;
+ char buf[buflen] = { 0 };
+ int len = 0;
p = const_cast<char*>( XMLUtil::GetCharacterRef( p, buf, &len ) );
- for( int i=0; i<len; ++i ) {
- *q++ = buf[i];
- }
- TIXMLASSERT( q <= p );
+ TIXMLASSERT( 0 <= len && len <= buflen );
+ TIXMLASSERT( q + len <= p );
+ memcpy( q, buf, len );
+ q += len;
}
else {
int i=0;