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;