From 74c95ec5932c737d4fcb06b8646b0017364ada14 Mon Sep 17 00:00:00 2001 From: Mike Dalessio 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