Resolve crash when printing malformed entities - issue 291

This commit is contained in:
Dmitry-Me 2015-03-14 13:25:03 +03:00
parent 0f922e7c9a
commit 6f51c803a1
2 changed files with 23 additions and 5 deletions

View File

@ -228,11 +228,19 @@ const char* StrPair::GetStr()
const int buflen = 10;
char buf[buflen] = { 0 };
int len = 0;
p = const_cast<char*>( XMLUtil::GetCharacterRef( p, buf, &len ) );
TIXMLASSERT( 0 <= len && len <= buflen );
TIXMLASSERT( q + len <= p );
memcpy( q, buf, len );
q += len;
char* adjusted = const_cast<char*>( XMLUtil::GetCharacterRef( p, buf, &len ) );
if ( adjusted == 0 ) {
*q = *p;
++p;
++q;
}
else {
TIXMLASSERT( 0 <= len && len <= buflen );
TIXMLASSERT( q + len <= adjusted );
p = adjusted;
memcpy( q, buf, len );
q += len;
}
}
else {
int i=0;

View File

@ -1416,6 +1416,16 @@ int main( int argc, const char ** argv )
XMLPrinter printer;
}
{
// Issue 291. Should not crash
const char* xml = "&#0</a>";
XMLDocument doc;
doc.Parse( xml );
XMLPrinter printer;
doc.Print( &printer );
}
// ----------- Performance tracking --------------
{
#if defined( _MSC_VER )