1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2025-10-26 00:37:43 +03:00

parser: Consolidate scanning of XML Names

Use new productions by default.

Fixes #194.
Fixes #364.
See #707.
This commit is contained in:
Nick Wellnhofer
2025-05-18 01:52:38 +02:00
parent 657254a87f
commit 7008740a96
6 changed files with 268 additions and 999 deletions

View File

@@ -35,6 +35,7 @@
#include <libxml/parserInternals.h>
#include "private/memory.h"
#include "private/parser.h"
#ifdef LIBXML_PATTERN_ENABLED
@@ -686,23 +687,13 @@ static xmlChar *
xmlPatScanName(xmlPatParserContextPtr ctxt) {
const xmlChar *q, *cur;
xmlChar *ret = NULL;
int val, len;
SKIP_BLANKS;
cur = q = CUR_PTR;
val = xmlStringCurrentChar(NULL, cur, &len);
if (!IS_LETTER(val) && (val != '_') && (val != ':'))
return(NULL);
while ((IS_LETTER(val)) || (IS_DIGIT(val)) ||
(val == '.') || (val == '-') ||
(val == '_') ||
(IS_COMBINING(val)) ||
(IS_EXTENDER(val))) {
cur += len;
val = xmlStringCurrentChar(NULL, cur, &len);
}
q = CUR_PTR;
cur = xmlScanName(q, XML_MAX_NAME_LENGTH, 0);
if ((cur == NULL) || (cur == q))
return(NULL);
if (ctxt->dict)
ret = (xmlChar *) xmlDictLookup(ctxt->dict, q, cur - q);
else
@@ -722,23 +713,13 @@ static xmlChar *
xmlPatScanNCName(xmlPatParserContextPtr ctxt) {
const xmlChar *q, *cur;
xmlChar *ret = NULL;
int val, len;
SKIP_BLANKS;
cur = q = CUR_PTR;
val = xmlStringCurrentChar(NULL, cur, &len);
if (!IS_LETTER(val) && (val != '_'))
return(NULL);
while ((IS_LETTER(val)) || (IS_DIGIT(val)) ||
(val == '.') || (val == '-') ||
(val == '_') ||
(IS_COMBINING(val)) ||
(IS_EXTENDER(val))) {
cur += len;
val = xmlStringCurrentChar(NULL, cur, &len);
}
q = CUR_PTR;
cur = xmlScanName(q, XML_MAX_NAME_LENGTH, XML_SCAN_NC);
if ((cur == NULL) || (cur == q))
return(NULL);
if (ctxt->dict)
ret = (xmlChar *) xmlDictLookup(ctxt->dict, q, cur - q);
else