diff --git a/parser/expat/lib/xmlparse.c b/parser/expat/lib/xmlparse.c index fe9f568ab0fd..93a8177645f9 100644 --- a/parser/expat/lib/xmlparse.c +++ b/parser/expat/lib/xmlparse.c @@ -4906,7 +4906,29 @@ processInternalEntity(XML_Parser parser, ENTITY *entity, } else { entity->open = XML_FALSE; +/* BEGIN MOZILLA CHANGE (Deal with parser interruption from nested entities) */ +#if 0 openInternalEntities = openEntity->next; +#else + if (openInternalEntities == openEntity) { + openInternalEntities = openEntity->next; + } + else { + /* openEntity should be closed, but it contains an inner entity that is + still open. Remove openEntity from the openInternalEntities linked + list by looking for the inner entity in the list that links to + openEntity and fixing up its 'next' member + */ + OPEN_INTERNAL_ENTITY *innerOpenEntity = openInternalEntities; + do { + if (innerOpenEntity->next == openEntity) { + innerOpenEntity->next = openEntity->next; + break; + } + } while ((innerOpenEntity = innerOpenEntity->next)); + } +#endif +/* END MOZILLA CHANGE */ /* put openEntity back in list of free instances */ openEntity->next = freeInternalEntities; freeInternalEntities = openEntity; diff --git a/parser/htmlparser/tests/reftest/bug569229-1-ref.xml b/parser/htmlparser/tests/reftest/bug569229-1-ref.xml new file mode 100644 index 000000000000..652f1d7da8b3 --- /dev/null +++ b/parser/htmlparser/tests/reftest/bug569229-1-ref.xml @@ -0,0 +1,2 @@ + +

abcd

diff --git a/parser/htmlparser/tests/reftest/bug569229-1.xml b/parser/htmlparser/tests/reftest/bug569229-1.xml new file mode 100644 index 000000000000..2e1ff75603ee --- /dev/null +++ b/parser/htmlparser/tests/reftest/bug569229-1.xml @@ -0,0 +1,6 @@ + +

abcd

"> + +]> +&outer; diff --git a/parser/htmlparser/tests/reftest/reftest.list b/parser/htmlparser/tests/reftest/reftest.list index 4df6b564b5f9..a549c9481d78 100644 --- a/parser/htmlparser/tests/reftest/reftest.list +++ b/parser/htmlparser/tests/reftest/reftest.list @@ -1,6 +1,7 @@ == bug535530-1.html bug535530-1-ref.html == view-source:bug535530-2.html bug535530-2-ref.html == bug566280-1.html bug566280-1-ref.html +== bug569229-1.xml bug569229-1-ref.xml == bug577418-1.html bug577418-1-ref.html == bug582788-1.html bug582788-1-ref.html fuzzy-if(skiaContent,2,5) == bug582940-1.html bug582940-1-ref.html