You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@xerces.apache.org by Neil Sherman <ns...@aimltd.co.uk> on 2004/08/05 10:15:24 UTC

XMLReader Destructor attempting to deallocate NULL pointer

Hi all!

I have a function that is attempting to parse an XML document in the
form of a string, the code for this function is as follows:

// Initialise variables
	vl_MemBufID_str  = "prodInfo";

// Create a new memory buffer input source
	vl_MemBufInput_ptr = boost::shared_ptr<MemBufInputSource> (
					new
MemBufInputSource(reinterpret_cast<const 
						XMLByte*>
(cp_Document_str.c_str()), 
					 static_cast<m>
(cp_Document_str.size()),
vl_MemBufID_str.c_str(), 
					false));

// Convert the MemBufInputSource to a DomInputSource
	vl_InputWrapper_ptr = boost::shared_ptr<Wrapper4InputSource> (
								new 
	
Wrapper4InputSource(vl_MemBufInput_ptr.get(), 
					false));

	try
		{
// Reset the document pool
		Pvm_Parser->resetDocumentPool();

// Parse the XML string
		Pvl_DomDocument =
Pvm_Parser->parse(*vl_InputWrapper_ptr.get());

// Create a new XMLDocument
		vl_XmlDocument_ptr = boost::shared_ptr<Ctxw_XmlDocument>
(
								new
Ctxw_XmlDocument 
	
(Pvl_DomDocument));

I can continuously use this code to parse documents for about 1 1/2 days
or so and then my program will crash.  The actual crash occurs in the
destructor of XMLReader:

XMLReader::~XMLReader()
{
    fMemoryManager->deallocate(fEncodingStr);
    fMemoryManager->deallocate(fPublicId);		// <-- Crash
    fMemoryManager->deallocate(fSystemId);
    delete fStream;
    delete fTranscoder;
}

It appears it is attempting to deallocate a NULL pointer (fPublicId).
If I inspect the rest of the class it all looks ok so dosent really look
like memory corruption?  I also don't understand how the code appears to
work successfully for 1 1/2 days prior to seeing this error ?

The actual stack trace is as follows:

Xercesc_2_5::XMLReader::~XMLReader() Line 425
Xercesc_2_5::XMLReader::`scalar deleting destructor'() + 0xf
Xercesc_2_5::ReaderMgr::reset() Line 970 + 0x1f
Xercesc_2_5::IGXMLScanner::scanDocument(const xerces_2_5::InputSource
&src={...}) Line 339
Xercesc_2_5::AbstractDOMParser::parse(const xerces_2_5::InputSource &
source={...}) Line 471
Xercesc_2_5::DOMBuilderImpl::parse(const xercesc_2_5::DOMInputSource &
source={...}) Line 469
Ctxw_XmlParser::ReadXml(const
std::basic_string<char,std::char_traits<char>,std::allocator<char>>&
cp_Document_str={...}) Line 881 + 0x48
...
...

I am using version 2.5 of Xerces taken from the nightly build on the
27/07/2004.  The parser I am creating is a DOMBuilder and is created in
the class constructor with the following code :


// Create the implementation string
	bool vl_Success_bl = XMLString::transcode("LS", 
				vl_TempStr_c, 99);

// Get the DOM implementation
	Pvl_DOMImplementation = 
	DOMImplementationRegistry::getDOMImplementation(vl_TempStr_c);

// Create a new Xerces parser
	Pvm_Parser = boost::shared_ptr<DOMBuilder> 
	((dynamic_cast<DOMImplementationLS*>(Pvl_DOMImplementation))->
	createDOMBuilder(DOMImplementationLS::MODE_SYNCHRONOUS, 0));

// Set the error handler
	SetXmlErrorHandler (vm_ErrorHandler);



If there is any further information I can provide that would be useful
please let me know.

Any pointers to the potential problem would be greatly appreciated, 

Many thanks

Neil


This email message contains confidential information and is intended for the use of its intended recipient only.  Access to this email by anyone else is unauthorised.  If you are not the intended recipient you are hereby notified that any use, disclosure, copying or distribution or any action taken or omitted to be taken in reliance on it is strictly prohibited.

If this communication has been sent to you in error, please notify us immediately.

Action Information Management Ltd.
129 Devizes Road, Hilperton, Trowbridge, Wiltshire BA14 7SZ.
Tel: +44 (0) 1225 711200
Fax: +44 (0) 1225 711222
Website www.aimltd.co.uk
email: support@aimltd.co.uk



---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-c-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-c-dev-help@xml.apache.org