[4suite-checkins] [XML1_0-maint] In 4Suite/Ft/Xml/src/domlette, files expat_module.c

Jeremy Kloth jkloth at 4suite.org
Sat Dec 16 18:22:21 MST 2006


Branch: XML1_0-maint

Modified Files:
    expat_module.c

Log Message:
Fixed bug with xi:include element's orphaning element state thus causing
an error with xsl:strip-elements.

ViewCVS diff:
  http://cvs.4suite.org/viewcvs/4Suite/Ft/Xml/src/domlette/expat_module.c.diff?r1=1.105.2.5&r2=1.105.2.6
ViewCVS view:
  http://cvs.4suite.org/viewcvs/4Suite/Ft/Xml/src/domlette/expat_module.c?rev=1.105.2.6&content-type=text/vnd.viewcvs-markup

Index: expat_module.c
===================================================================
RCS file: /var/local/cvsroot/4Suite/Ft/Xml/src/domlette/expat_module.c,v
retrieving revision 1.105.2.5
retrieving revision 1.105.2.6
diff -U2 -r1.105.2.5 -r1.105.2.6
--- expat_module.c	10 Dec 2006 22:51:24 -0000	1.105.2.5
+++ expat_module.c	17 Dec 2006 01:22:20 -0000	1.105.2.6
@@ -1854,4 +1854,40 @@
 }
 
+static void popElementState(ExpatParser parser)
+{
+  PyObject *temp;
+
+  temp = Stack_Pop(parser->xml_base_stack);
+  Py_DECREF(temp);
+
+  temp = Stack_Pop(parser->xml_lang_stack);
+  Py_DECREF(temp);
+
+  temp = Stack_Pop(parser->xml_space_stack);
+  Py_DECREF(temp);
+
+  temp = Stack_Pop(parser->preserve_whitespace_stack);
+  Py_DECREF(temp);
+}
+
+static ExpatStatus validateEndElement(ExpatParser parser,
+                                      const XML_Char *name)
+{
+  ExpatExpandedName *expanded_name;
+
+  switch (Validator_EndElement(parser->context->dtd->validator)) {
+  case 0:
+    expanded_name = makeExpandedName(parser, name);
+    if (expanded_name == NULL) {
+      return Expat_FatalError(parser);
+    }
+    return Expat_ReportError(parser, "INCOMPLETE_ELEMENT", "{sO}",
+                             "element", expanded_name->qualifiedName);
+  case 1:
+    return EXPAT_STATUS_OK;
+  default:
+    return Expat_FatalError(parser);
+  }
+}
 
 /** XInclude Processing ***********************************************/
@@ -2779,24 +2815,7 @@
         }
         if (Expat_HasFlag(parser, EXPAT_FLAG_VALIDATE)) {
-          ExpatExpandedName *expanded_name;
-          switch (Validator_EndElement(parser->context->dtd->validator)) {
-          case 0:
-            expanded_name = makeExpandedName(parser, name);
-            if (expanded_name == NULL) {
-              Expat_FatalError(parser);
-              return;
-            }
-            if (Expat_ReportError(parser, "INCOMPLETE_ELEMENT", "{sO}",
-                                  "element", expanded_name->qualifiedName)
-                == EXPAT_STATUS_ERROR) {
-              return;
-            }
-          case 1:
-            break;
-          default:
-            Expat_FatalError(parser);
-            return;
-          }
+          if (validateEndElement(parser, name) == EXPAT_STATUS_ERROR) return;
         }
+        popElementState(parser);
       }
 #ifdef DEBUG_XINCLUDE
@@ -3471,5 +3490,4 @@
 {
   ExpatExpandedName *expanded_name;
-  PyObject *temp;
 
   Debug_ParserFunctionCall(expat_EndElement, parser);
@@ -3490,32 +3508,10 @@
 
   if (Expat_HasFlag(parser, EXPAT_FLAG_VALIDATE)) {
-    switch (Validator_EndElement(parser->context->dtd->validator)) {
-    case 0:
-      if (Expat_ReportError(parser, "INCOMPLETE_ELEMENT", "{sO}",
-                            "element", expanded_name->qualifiedName)
-          == EXPAT_STATUS_ERROR) {
-        return;
-      }
-    case 1:
-      break;
-    default:
-      Expat_FatalError(parser);
-      return;
-    }
+    if (validateEndElement(parser, name) == EXPAT_STATUS_ERROR) return;
   }
 
   parser->end_element_handler(parser->userState, expanded_name);
 
-  temp = Stack_Pop(parser->xml_base_stack);
-  Py_DECREF(temp);
-
-  temp = Stack_Pop(parser->xml_lang_stack);
-  Py_DECREF(temp);
-
-  temp = Stack_Pop(parser->xml_space_stack);
-  Py_DECREF(temp);
-
-  temp = Stack_Pop(parser->preserve_whitespace_stack);
-  Py_DECREF(temp);
+  popElementState(parser);
 }
 


More information about the 4suite-checkins mailing list