You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by am...@apache.org on 2008/02/20 12:15:01 UTC
svn commit: r629420 - in /xerces/c/branches/xerces-2/src/xercesc/parsers:
SAX2XMLReaderImpl.cpp SAXParser.cpp
Author: amassari
Date: Wed Feb 20 03:14:45 2008
New Revision: 629420
URL: http://svn.apache.org/viewvc?rev=629420&view=rev
Log:
Check for the callback pointer to be valid before each call, as a callback could be resetting it (XERCESC-1781)
Modified:
xerces/c/branches/xerces-2/src/xercesc/parsers/SAX2XMLReaderImpl.cpp
xerces/c/branches/xerces-2/src/xercesc/parsers/SAXParser.cpp
Modified: xerces/c/branches/xerces-2/src/xercesc/parsers/SAX2XMLReaderImpl.cpp
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2/src/xercesc/parsers/SAX2XMLReaderImpl.cpp?rev=629420&r1=629419&r2=629420&view=diff
==============================================================================
--- xerces/c/branches/xerces-2/src/xercesc/parsers/SAX2XMLReaderImpl.cpp (original)
+++ xerces/c/branches/xerces-2/src/xercesc/parsers/SAX2XMLReaderImpl.cpp Wed Feb 20 03:14:45 2008
@@ -666,10 +666,9 @@
{
// Just map to the SAX document handler
if (fDocHandler)
- {
fDocHandler->setDocumentLocator(fScanner->getLocator());
+ if(fDocHandler)
fDocHandler->startDocument();
- }
//
// If there are any installed advanced handlers, then lets call them
@@ -744,7 +743,8 @@
{
if (nsPrefix == 0)
nsPrefix = XMLUni::fgZeroLenString;
- fDocHandler->startPrefixMapping(nsPrefix, nsURI);
+ if(fDocHandler)
+ fDocHandler->startPrefixMapping(nsPrefix, nsURI);
unsigned int nPrefixId=fPrefixesStorage->addOrFind(nsPrefix);
fPrefixes->push(nPrefixId) ;
numPrefix++;
@@ -757,21 +757,27 @@
fAttrList.setVector(&attrList, attrCount, fScanner);
// call startElement() with namespace declarations
- fDocHandler->startElement
- (
- fScanner->getURIText(elemURLId)
- , elemDecl.getBaseName()
- , elemQName
- , fAttrList
- );
+ if(fDocHandler)
+ {
+ fDocHandler->startElement
+ (
+ fScanner->getURIText(elemURLId)
+ , elemDecl.getBaseName()
+ , elemQName
+ , fAttrList
+ );
+ }
}
else // no namespace
{
fAttrList.setVector(&attrList, attrCount, fScanner);
- fDocHandler->startElement(XMLUni::fgZeroLenString,
- elemDecl.getBaseName(),
- elemQName,
- fAttrList);
+ if(fDocHandler)
+ {
+ fDocHandler->startElement(XMLUni::fgZeroLenString,
+ elemDecl.getBaseName(),
+ elemQName,
+ fAttrList);
+ }
}
@@ -781,25 +787,32 @@
// call endPrefixMapping appropriately.
if (getDoNamespaces())
{
- fDocHandler->endElement
- (
- fScanner->getURIText(elemURLId)
- , elemDecl.getBaseName()
- , elemQName
- );
+ if(fDocHandler)
+ {
+ fDocHandler->endElement
+ (
+ fScanner->getURIText(elemURLId)
+ , elemDecl.getBaseName()
+ , elemQName
+ );
+ }
unsigned int numPrefix = fPrefixCounts->pop();
for (unsigned int i = 0; i < numPrefix; ++i)
{
unsigned int nPrefixId = fPrefixes->pop() ;
- fDocHandler->endPrefixMapping( fPrefixesStorage->getValueForId(nPrefixId) );
+ if(fDocHandler)
+ fDocHandler->endPrefixMapping( fPrefixesStorage->getValueForId(nPrefixId) );
}
}
else
{
- fDocHandler->endElement(XMLUni::fgZeroLenString,
- elemDecl.getBaseName(),
- elemQName);
+ if(fDocHandler)
+ {
+ fDocHandler->endElement(XMLUni::fgZeroLenString,
+ elemDecl.getBaseName(),
+ elemQName);
+ }
}
}
}
@@ -849,29 +862,36 @@
if (getDoNamespaces())
{
- fDocHandler->endElement
- (
- fScanner->getURIText(uriId)
- , elemDecl.getBaseName()
- , elemQName
- );
+ if(fDocHandler)
+ {
+ fDocHandler->endElement
+ (
+ fScanner->getURIText(uriId)
+ , elemDecl.getBaseName()
+ , elemQName
+ );
+ }
// get the prefixes back so that we can call endPrefixMapping()
unsigned int numPrefix = fPrefixCounts->pop();
for (unsigned int i = 0; i < numPrefix; i++)
{
unsigned int nPrefixId = fPrefixes->pop() ;
- fDocHandler->endPrefixMapping( fPrefixesStorage->getValueForId(nPrefixId) );
+ if(fDocHandler)
+ fDocHandler->endPrefixMapping( fPrefixesStorage->getValueForId(nPrefixId) );
}
}
else
{
- fDocHandler->endElement
- (
- XMLUni::fgZeroLenString,
- elemDecl.getBaseName(),
- elemQName
- );
+ if(fDocHandler)
+ {
+ fDocHandler->endElement
+ (
+ XMLUni::fgZeroLenString,
+ elemDecl.getBaseName(),
+ elemQName
+ );
+ }
}
}
@@ -1026,11 +1046,10 @@
void SAX2XMLReaderImpl::endExtSubset()
{
// Call the installed LexicalHandler.
- if (fLexicalHandler) {
-
+ if (fLexicalHandler)
fLexicalHandler->endEntity(gDTDEntityStr);
+ if (fLexicalHandler)
fLexicalHandler->endDTD();
- }
// Unused by SAX DTDHandler interface at this time
}
Modified: xerces/c/branches/xerces-2/src/xercesc/parsers/SAXParser.cpp
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2/src/xercesc/parsers/SAXParser.cpp?rev=629420&r1=629419&r2=629420&view=diff
==============================================================================
--- xerces/c/branches/xerces-2/src/xercesc/parsers/SAXParser.cpp (original)
+++ xerces/c/branches/xerces-2/src/xercesc/parsers/SAXParser.cpp Wed Feb 20 03:14:45 2008
@@ -923,10 +923,9 @@
{
// Just map to the SAX document handler
if (fDocHandler)
- {
fDocHandler->setDocumentLocator(fScanner->getLocator());
+ if(fDocHandler)
fDocHandler->startDocument();
- }
//
// If there are any installed advanced handlers, then lets call them
@@ -963,7 +962,7 @@
fDocHandler->startElement(fElemQNameBuf.getRawBuffer(), fAttrList);
// If its empty, send the end tag event now
- if (isEmpty)
+ if (isEmpty && fDocHandler)
fDocHandler->endElement(fElemQNameBuf.getRawBuffer());
}
else {
@@ -971,7 +970,7 @@
fDocHandler->startElement(elemDecl.getBaseName(), fAttrList);
// If its empty, send the end tag event now
- if (isEmpty)
+ if (isEmpty && fDocHandler)
fDocHandler->endElement(elemDecl.getBaseName());
}
}
@@ -979,7 +978,7 @@
fDocHandler->startElement(elemDecl.getFullName(), fAttrList);
// If its empty, send the end tag event now
- if (isEmpty)
+ if (isEmpty && fDocHandler)
fDocHandler->endElement(elemDecl.getFullName());
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org