diff options
author | Daniel Veillard <veillard@src.gnome.org> | 2004-11-01 14:55:21 +0000 |
---|---|---|
committer | Daniel Veillard <veillard@src.gnome.org> | 2004-11-01 14:55:21 +0000 |
commit | 032268145fad72bbf00c944c1f6a067e5da4a1e0 (patch) | |
tree | 4145df7bc1c8bb939df1a7691e256576e072b813 | |
parent | acbe6cfd966bdc5339bea4290d748839fb2903f8 (diff) | |
download | libxml2-032268145fad72bbf00c944c1f6a067e5da4a1e0.tar.gz |
fixed an UTF-8 parsing bug reported by Markus Bertheau on #fedora-devel
* xpath.c: fixed an UTF-8 parsing bug reported by Markus Bertheau
on #fedora-devel
Daniel
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | xpath.c | 47 |
2 files changed, 28 insertions, 24 deletions
@@ -1,3 +1,8 @@ +Mon Nov 1 15:54:18 CET 2004 Daniel Veillard <daniel@veillard.com> + + * xpath.c: fixed an UTF-8 parsing bug reported by Markus Bertheau + on #fedora-devel + Sun Oct 31 22:03:38 CET 2004 Daniel Veillard <daniel@veillard.com> * parser.c: fixed a bug reported by Petr Pajas on the list and @@ -8012,35 +8012,34 @@ xmlXPathCompFilterExpr(xmlXPathParserContextPtr ctxt) { static xmlChar * xmlXPathScanName(xmlXPathParserContextPtr ctxt) { - xmlChar buf[XML_MAX_NAMELEN]; - int len = 0; + int len = 0, l; + int c; + int count = 0; + const xmlChar *cur; + xmlChar *ret; - SKIP_BLANKS; - if (!IS_ASCII_LETTER(CUR) && (CUR != '_') && - (CUR != ':')) { + cur = ctxt->cur; + + c = CUR_CHAR(l); + if ((c == ' ') || (c == '>') || (c == '/') || /* accelerators */ + (!IS_LETTER(c) && (c != '_') && + (c != ':'))) { return(NULL); } - while ((IS_ASCII_LETTER(NXT(len))) || (IS_ASCII_DIGIT(NXT(len))) || - (NXT(len) == '.') || (NXT(len) == '-') || - (NXT(len) == '_') || (NXT(len) == ':') || - (IS_COMBINING_CH(NXT(len))) || - (IS_EXTENDER_CH(NXT(len)))) { - buf[len] = NXT(len); - len++; - if (len >= XML_MAX_NAMELEN) { - xmlGenericError(xmlGenericErrorContext, - "xmlScanName: reached XML_MAX_NAMELEN limit\n"); - while ((IS_ASCII_LETTER(NXT(len))) || (IS_ASCII_DIGIT(NXT(len))) || - (NXT(len) == '.') || (NXT(len) == '-') || - (NXT(len) == '_') || (NXT(len) == ':') || - (IS_COMBINING_CH(NXT(len))) || - (IS_EXTENDER_CH(NXT(len)))) - len++; - break; - } + while ((c != ' ') && (c != '>') && (c != '/') && /* test bigname.xml */ + ((IS_LETTER(c)) || (IS_DIGIT(c)) || + (c == '.') || (c == '-') || + (c == '_') || (c == ':') || + (IS_COMBINING(c)) || + (IS_EXTENDER(c)))) { + len += l; + NEXTL(l); + c = CUR_CHAR(l); } - return(xmlStrndup(buf, len)); + ret = xmlStrndup(cur, ctxt->cur - cur); + ctxt->cur = cur; + return(ret); } /** |