Merge pull request #670 from dquam/ProcessEntitiesBugWhenFalse

In PrintString, move the optimization under the if ( _processEntities…
This commit is contained in:
Lee Thomason
2018-05-17 11:30:22 -07:00
committed by GitHub
2 changed files with 20 additions and 7 deletions

View File

@@ -2523,14 +2523,16 @@ void XMLPrinter::PrintString( const char* p, bool restricted )
++q; ++q;
TIXMLASSERT( p <= q ); TIXMLASSERT( p <= q );
} }
// Flush the remaining string. This will be the entire
// string if an entity wasn't found.
if ( p < q ) {
const size_t delta = q - p;
const int toPrint = ( INT_MAX < delta ) ? INT_MAX : (int)delta;
Write( p, toPrint );
}
} }
// Flush the remaining string. This will be the entire else {
// string if an entity wasn't found. Write( p );
TIXMLASSERT( p <= q );
if ( !_processEntities || ( p < q ) ) {
const size_t delta = q - p;
const int toPrint = ( INT_MAX < delta ) ? INT_MAX : (int)delta;
Write( p, toPrint );
} }
} }

View File

@@ -1995,6 +1995,17 @@ int main( int argc, const char ** argv )
} }
} }
{
const char* html("<!DOCTYPE html><html><body><p>test</p><p><br/></p></body></html>");
XMLDocument doc(false);
doc.Parse(html);
XMLPrinter printer(0, true);
doc.Print(&printer);
XMLTest(html, html, printer.CStr());
}
{ {
// Evil memory leaks. // Evil memory leaks.
// If an XMLElement (etc) is allocated via NewElement() (etc.) // If an XMLElement (etc) is allocated via NewElement() (etc.)