diff options
Diffstat (limited to 'external/libxml2/libxml2-xpath.patch')
-rw-r--r-- | external/libxml2/libxml2-xpath.patch | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/external/libxml2/libxml2-xpath.patch b/external/libxml2/libxml2-xpath.patch new file mode 100644 index 000000000000..107de91ed862 --- /dev/null +++ b/external/libxml2/libxml2-xpath.patch @@ -0,0 +1,70 @@ +--- misc/libxml2-2.7.6/xpath.c 2009-09-24 17:32:00.000000000 +0200 ++++ misc/build/libxml2-2.7.6/xpath.c 2011-01-03 17:21:08.788256100 +0100 +@@ -8106,9 +8106,17 @@ + xmlNodePtr + xmlXPathNextFollowing(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { + if ((ctxt == NULL) || (ctxt->context == NULL)) return(NULL); +- if (cur != NULL && cur->children != NULL) +- return cur->children ; +- if (cur == NULL) cur = ctxt->context->node; ++ if ((cur != NULL) && (cur->type != XML_ATTRIBUTE_NODE) && ++ (cur->type != XML_NAMESPACE_DECL) && (cur->children != NULL)) ++ return(cur->children); ++ ++ if (cur == NULL) { ++ cur = ctxt->context->node; ++ if (cur->type == XML_NAMESPACE_DECL) ++ return(NULL); ++ if (cur->type == XML_ATTRIBUTE_NODE) ++ cur = cur->parent; ++ } + if (cur == NULL) return(NULL) ; /* ERROR */ + if (cur->next != NULL) return(cur->next) ; + do { +@@ -8162,8 +8170,13 @@ + xmlXPathNextPreceding(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) + { + if ((ctxt == NULL) || (ctxt->context == NULL)) return(NULL); +- if (cur == NULL) ++ if (cur == NULL) { + cur = ctxt->context->node; ++ if (cur->type == XML_NAMESPACE_DECL) ++ return(NULL); ++ if (cur->type == XML_ATTRIBUTE_NODE) ++ return(cur->parent); ++ } + if (cur == NULL) + return (NULL); + if ((cur->prev != NULL) && (cur->prev->type == XML_DTD_NODE)) +@@ -8207,8 +8220,8 @@ + cur = ctxt->context->node; + if (cur == NULL) + return (NULL); +- if (cur->type == XML_NAMESPACE_DECL) +- cur = (xmlNodePtr)((xmlNsPtr)cur)->next; ++ if (cur->type == XML_NAMESPACE_DECL) ++ return (NULL); + ctxt->ancestor = cur->parent; + } + if ((cur->prev != NULL) && (cur->prev->type == XML_DTD_NODE)) +@@ -11737,11 +11750,16 @@ + + if ((ctxt->error != XPATH_EXPRESSION_OK) || (res == -1)) { + xmlXPathObjectPtr tmp; +- /* pop the result */ ++ /* pop the result if any */ + tmp = valuePop(ctxt); +- xmlXPathReleaseObject(xpctxt, tmp); +- /* then pop off contextObj, which will be freed later */ +- valuePop(ctxt); ++ if (tmp != contextObj) { ++ /* ++ * Free up the result ++ * then pop off contextObj, which will be freed later ++ */ ++ xmlXPathReleaseObject(xpctxt, tmp); ++ valuePop(ctxt); ++ } + goto evaluation_error; + } + |