fixed bug #109160 on non-ASCII IDs Daniel
* xpath.c: fixed bug #109160 on non-ASCII IDs
Daniel
diff --git a/xpath.c b/xpath.c
index 9f093ed..1dea4d0 100644
--- a/xpath.c
+++ b/xpath.c
@@ -5946,23 +5946,26 @@
while (IS_BLANK(*cur)) cur++;
while (*cur != 0) {
- while ((IS_LETTER(*cur)) || (IS_DIGIT(*cur)) ||
- (*cur == '.') || (*cur == '-') ||
- (*cur == '_') || (*cur == ':') ||
- (IS_COMBINING(*cur)) ||
- (IS_EXTENDER(*cur)))
- cur++;
-
- if ((!IS_BLANK(*cur)) && (*cur != 0)) break;
+ while ((!IS_BLANK(*cur)) && (*cur != 0))
+ cur++;
ID = xmlStrndup(ids, cur - ids);
- attr = xmlGetID(doc, ID);
- if (attr != NULL) {
- elem = attr->parent;
- xmlXPathNodeSetAdd(ret, elem);
- }
- if (ID != NULL)
+ if (ID != NULL) {
+ if (xmlValidateNCName(ID, 1) == 0) {
+ attr = xmlGetID(doc, ID);
+ if (attr != NULL) {
+ if (attr->type == XML_ATTRIBUTE_NODE)
+ elem = attr->parent;
+ else if (attr->type == XML_ELEMENT_NODE)
+ elem = (xmlNodePtr) attr;
+ else
+ elem = NULL;
+ if (elem != NULL)
+ xmlXPathNodeSetAdd(ret, elem);
+ }
+ }
xmlFree(ID);
+ }
while (IS_BLANK(*cur)) cur++;
ids = cur;