You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by na...@apache.org on 2006/08/12 16:08:57 UTC

svn commit: r431037 - /webservices/axis/trunk/c/src/xml/xerces/XMLParserXerces.cpp

Author: nadiramra
Date: Sat Aug 12 07:08:57 2006
New Revision: 431037

URL: http://svn.apache.org/viewvc?rev=431037&view=rev
Log:
AXISCPP-770 XMLParserXerces::next(bool isCharData) crashes

Modified:
    webservices/axis/trunk/c/src/xml/xerces/XMLParserXerces.cpp

Modified: webservices/axis/trunk/c/src/xml/xerces/XMLParserXerces.cpp
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/xml/xerces/XMLParserXerces.cpp?rev=431037&r1=431036&r2=431037&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/xml/xerces/XMLParserXerces.cpp (original)
+++ webservices/axis/trunk/c/src/xml/xerces/XMLParserXerces.cpp Sat Aug 12 07:08:57 2006
@@ -82,8 +82,6 @@
 
 const AnyElement* XMLParserXerces::next(bool isCharData)
 {
-    bool bCanParseMore = false;
-
     if( !m_bFirstParsed)
     {
 //    Try this again at some point in the future.  At the moment it works on
@@ -134,39 +132,31 @@
     if(!m_bPeeked) 
         m_Xhandler.freeElement();
     
-    while (true)
+    bool bCanParseMore = true;
+    AnyElement* elem;
+    while (bCanParseMore)
     {
-        AnyElement* elem = m_Xhandler.getAnyElement();
+        // See if we have a token to consume
+        elem = m_Xhandler.getAnyElement();
+        
+        // Since we have consumed whatever is there, ensure peek flag is set to false
+        m_bPeeked = false;
+        
+        // If we do not have an element, then parse next token; else if
+        // whitespace, ignore whitespace; else return token
         if (!elem)
-        {
-            //Chinthana:check the peek is called or not
-            if(!m_bPeeked) 
-                bCanParseMore = m_pParser->parseNext(m_ScanToken);
-            else
-            {
-                m_bPeeked = false;
-                bCanParseMore = true;
-            }
-            elem = m_Xhandler.getAnyElement();
+        {     
+            bCanParseMore = m_pParser->parseNext(m_ScanToken);
+            if (AXIS_FAIL == m_Xhandler.getStatus())
+                break;
         }
-        if (elem)
-        {
-            if (!isCharData && (CHARACTER_ELEMENT == elem->m_type))
-            { /* ignorable white space */
-                m_Xhandler.freeElement();
-                continue;
-            }
-
-            if( m_bPeeked )
-                m_bPeeked = false;
-            
+        else if (!isCharData && (CHARACTER_ELEMENT == elem->m_type))
+            m_Xhandler.freeElement();
+        else
             return elem;
-        }
-        else if (AXIS_FAIL == m_Xhandler.getStatus()) 
-            return NULL;
-        else if (!bCanParseMore) 
-            return NULL;
     }
+    
+    return NULL;
 }
 // New method which peek a head next element 
 // Here always Peek() will call after the first pase done
@@ -179,18 +169,20 @@
             m_pParser->parseFirst(*m_pInputSource, m_ScanToken);
             m_bFirstParsed = true;
         }
-         
-        bool bCanParseMore = true;
         
         m_Xhandler.freeElement();
-        bCanParseMore = m_pParser->parseNext(m_ScanToken);
-        AnyElement* elem = m_Xhandler.getAnyElement();
-        while (CHARACTER_ELEMENT == elem->m_type) // we never peek for char data
-                                                  //hence this is a white space
-        { /* ignorable white space */
-            m_Xhandler.freeElement();
-            bCanParseMore = m_pParser->parseNext(m_ScanToken);
+        
+        AnyElement* elem;
+        while (m_pParser->parseNext(m_ScanToken) && AXIS_FAIL != m_Xhandler.getStatus())
+        {                             
+            // Attempt to get token
             elem = m_Xhandler.getAnyElement();
+            
+            // we never peek for char data hence this is a white space - ignore it.
+            if (elem && CHARACTER_ELEMENT == elem->m_type)
+                m_Xhandler.freeElement();
+            else
+                break;
          }
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org