From 74c95ec5932c737d4fcb06b8646b0017364ada14 Mon Sep 17 00:00:00 2001 From: Mike Dalessio <mike.dalessio@gmail.com> Date: Fri, 24 Dec 2021 19:08:01 -0500 Subject: [PATCH] attempt to hack in wildcard namespaces to xpath
I’m not confident this is a bulletproof patch.
xpath.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-)
diff –git a/xpath.c b/xpath.c index 1aa2f1a..c7f0885 100644 — a/xpath.c +++ b/xpath.c @@ -146,6 +146,9 @@
#define XPATH_MAX_RECURSION_DEPTH 5000 #endif
+#define WILDCARD_PREFIX “*” +#define IS_WILDCARD_PREFIX(p) xmlStrEqual((xmlChar*)WILDCARD_PREFIX, p) +
/* * TODO: * There are a few spots where some tests are done which depend upon ascii
@@ -11073,12 +11076,15 @@ xmlXPathCompNodeTest(xmlXPathParserContextPtr ctxt, xmlXPathTestVal *test,
SKIP_BLANKS; if ((name == NULL) && (CUR == '*')) {
-
/*
-
All elements
-
-
*/
NEXT;
-
*test = NODE_TEST_ALL;
-
return(NULL);
+ if (CUR != ‘:’) { + /* + * All elements + */ + *test = NODE_TEST_ALL; + return(NULL); + } + name = xmlCharStrdup(WILDCARD_PREFIX);
} if (name == NULL)
@@ -11327,6 +11333,10 @@ xmlXPathCompStep(xmlXPathParserContextPtr ctxt) {
} #endif if (CUR == '*') {
+ if (NXT(1) == ‘:’) { + NEXT; + name = xmlCharStrdup(WILDCARD_PREFIX); + }
axis = AXIS_CHILD; } else { if (name == NULL)
@@ -12030,7 +12040,7 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt,
/* * Setup namespaces. */
-
if (prefix != NULL) {
+ if (prefix != NULL && !IS_WILDCARD_PREFIX(prefix)) {
URI = xmlXPathNsLookup(xpctxt, prefix); if (URI == NULL) { xmlXPathReleaseObject(xpctxt, obj);
@@ -12369,6 +12379,8 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt,
{ XP_TEST_HIT }
+ } else if (IS_WILDCARD_PREFIX(prefix)) { + XP_TEST_HIT
} else { if ((cur->ns != NULL) && (xmlStrEqual(URI, cur->ns->href)))
– 2.31.0