[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