diff --git a/ChangeLog b/ChangeLog index 1c1b54e5..d23751d0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Wed Mar 26 22:38:39 CET 2003 Daniel Veillard + + * xpath.c: fixed bug #109160 on non-ASCII IDs + Wed Mar 26 17:30:37 CET 2003 Daniel Veillard * parser.c: Norm suggested a nicer error message for xml:space values diff --git a/xpath.c b/xpath.c index 9f093edc..1dea4d0c 100644 --- a/xpath.c +++ b/xpath.c @@ -5946,23 +5946,26 @@ xmlXPathGetElementsByIds (xmlDocPtr doc, const xmlChar *ids) { 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;