Details
Description
In the function IGXMLScanner::scanDocument(const InputSource& src), if the
call:
// Reset the reader manager to close all files, sockets, etc...
fReaderMgr.reset();
throws it goes to one of the catches which calls it again, such as:
catch(...)
{ // Flush the reader manager and rethrow user's error fReaderMgr.reset(); throw; }This is a problem in the reset function because if the "delete fCurReader"
line throws fCurReader is not set to 0, and the second call to reset attempts
to delete it again.
void ReaderMgr::reset()
{
// Reset all of the flags
fThrowEOE = false;
// Delete the current reader and flush the reader stack
delete fCurReader; // <--- derived class threw
fCurReader = 0;
It seems that fCurReader should be set to 0 before attempting the delete.