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