diff options
author | Daniel Veillard <veillard@src.gnome.org> | 2002-01-13 15:43:22 +0000 |
---|---|---|
committer | Daniel Veillard <veillard@src.gnome.org> | 2002-01-13 15:43:22 +0000 |
commit | d8224e0f7ee96b6835905e2a5a8a010f4bc270ed (patch) | |
tree | 4ed11542142f60acf845fac02fdc616f5dda7995 /valid.c | |
parent | 8107a22f962b66f0e9bcc04e53874992e44a3917 (diff) | |
download | android_external_libxml2-d8224e0f7ee96b6835905e2a5a8a010f4bc270ed.tar.gz android_external_libxml2-d8224e0f7ee96b6835905e2a5a8a010f4bc270ed.tar.bz2 android_external_libxml2-d8224e0f7ee96b6835905e2a5a8a010f4bc270ed.zip |
fixed validation of attributes content of type NAME NAMES NMTOKEN and
* valid.c: fixed validation of attributes content of type
NAME NAMES NMTOKEN and NMTOKENS to accept internationalized
values, very old bug. Fixes #67671
Daniel
Diffstat (limited to 'valid.c')
-rw-r--r-- | valid.c | 181 |
1 files changed, 110 insertions, 71 deletions
@@ -2565,23 +2565,29 @@ xmlIsMixedElement(xmlDocPtr doc, const xmlChar *name) { static int xmlValidateNameValue(const xmlChar *value) { const xmlChar *cur; + int val, len; if (value == NULL) return(0); cur = value; - - if (!IS_LETTER(*cur) && (*cur != '_') && - (*cur != ':')) { + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; + if (!IS_LETTER(val) && (val != '_') && + (val != ':')) { return(0); } - while ((IS_LETTER(*cur)) || (IS_DIGIT(*cur)) || - (*cur == '.') || (*cur == '-') || - (*cur == '_') || (*cur == ':') || - (IS_COMBINING(*cur)) || - (IS_EXTENDER(*cur))) - cur++; + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; + while ((IS_LETTER(val)) || (IS_DIGIT(val)) || + (val == '.') || (val == '-') || + (val == '_') || (val == ':') || + (IS_COMBINING(val)) || + (IS_EXTENDER(val))) { + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; + } - if (*cur != 0) return(0); + if (val != 0) return(0); return(1); } @@ -2598,39 +2604,53 @@ xmlValidateNameValue(const xmlChar *value) { static int xmlValidateNamesValue(const xmlChar *value) { const xmlChar *cur; + int val, len; if (value == NULL) return(0); cur = value; + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; - if (!IS_LETTER(*cur) && (*cur != '_') && - (*cur != ':')) { + if (!IS_LETTER(val) && (val != '_') && + (val != ':')) { return(0); } - while ((IS_LETTER(*cur)) || (IS_DIGIT(*cur)) || - (*cur == '.') || (*cur == '-') || - (*cur == '_') || (*cur == ':') || - (IS_COMBINING(*cur)) || - (IS_EXTENDER(*cur))) - cur++; + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; + while ((IS_LETTER(val)) || (IS_DIGIT(val)) || + (val == '.') || (val == '-') || + (val == '_') || (val == ':') || + (IS_COMBINING(val)) || + (IS_EXTENDER(val))) { + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; + } - while (IS_BLANK(*cur)) { - while (IS_BLANK(*cur)) cur++; + while (IS_BLANK(val)) { + while (IS_BLANK(val)) { + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; + } - if (!IS_LETTER(*cur) && (*cur != '_') && - (*cur != ':')) { + if (!IS_LETTER(val) && (val != '_') && + (val != ':')) { return(0); } - - while ((IS_LETTER(*cur)) || (IS_DIGIT(*cur)) || - (*cur == '.') || (*cur == '-') || - (*cur == '_') || (*cur == ':') || - (IS_COMBINING(*cur)) || - (IS_EXTENDER(*cur))) - cur++; + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; + + while ((IS_LETTER(val)) || (IS_DIGIT(val)) || + (val == '.') || (val == '-') || + (val == '_') || (val == ':') || + (IS_COMBINING(val)) || + (IS_EXTENDER(val))) { + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; + } } - if (*cur != 0) return(0); + if (val != 0) return(0); return(1); } @@ -2649,25 +2669,30 @@ xmlValidateNamesValue(const xmlChar *value) { static int xmlValidateNmtokenValue(const xmlChar *value) { const xmlChar *cur; + int val, len; if (value == NULL) return(0); cur = value; + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; - if (!IS_LETTER(*cur) && !IS_DIGIT(*cur) && - (*cur != '.') && (*cur != '-') && - (*cur != '_') && (*cur != ':') && - (!IS_COMBINING(*cur)) && - (!IS_EXTENDER(*cur))) + if (!IS_LETTER(val) && !IS_DIGIT(val) && + (val != '.') && (val != '-') && + (val != '_') && (val != ':') && + (!IS_COMBINING(val)) && + (!IS_EXTENDER(val))) return(0); - while ((IS_LETTER(*cur)) || (IS_DIGIT(*cur)) || - (*cur == '.') || (*cur == '-') || - (*cur == '_') || (*cur == ':') || - (IS_COMBINING(*cur)) || - (IS_EXTENDER(*cur))) - cur++; + while ((IS_LETTER(val)) || (IS_DIGIT(val)) || + (val == '.') || (val == '-') || + (val == '_') || (val == ':') || + (IS_COMBINING(val)) || + (IS_EXTENDER(val))) { + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; + } - if (*cur != 0) return(0); + if (val != 0) return(0); return(1); } @@ -2686,45 +2711,59 @@ xmlValidateNmtokenValue(const xmlChar *value) { static int xmlValidateNmtokensValue(const xmlChar *value) { const xmlChar *cur; + int val, len; if (value == NULL) return(0); cur = value; + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; - while (IS_BLANK(*cur)) cur++; - if (!IS_LETTER(*cur) && !IS_DIGIT(*cur) && - (*cur != '.') && (*cur != '-') && - (*cur != '_') && (*cur != ':') && - (!IS_COMBINING(*cur)) && - (!IS_EXTENDER(*cur))) + while (IS_BLANK(val)) { + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; + } + + if (!IS_LETTER(val) && !IS_DIGIT(val) && + (val != '.') && (val != '-') && + (val != '_') && (val != ':') && + (!IS_COMBINING(val)) && + (!IS_EXTENDER(val))) return(0); - while ((IS_LETTER(*cur)) || (IS_DIGIT(*cur)) || - (*cur == '.') || (*cur == '-') || - (*cur == '_') || (*cur == ':') || - (IS_COMBINING(*cur)) || - (IS_EXTENDER(*cur))) - cur++; - - while (IS_BLANK(*cur)) { - while (IS_BLANK(*cur)) cur++; - if (*cur == 0) return(1); - - if (!IS_LETTER(*cur) && !IS_DIGIT(*cur) && - (*cur != '.') && (*cur != '-') && - (*cur != '_') && (*cur != ':') && - (!IS_COMBINING(*cur)) && - (!IS_EXTENDER(*cur))) + while ((IS_LETTER(val)) || (IS_DIGIT(val)) || + (val == '.') || (val == '-') || + (val == '_') || (val == ':') || + (IS_COMBINING(val)) || + (IS_EXTENDER(val))) { + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; + } + + while (IS_BLANK(val)) { + while (IS_BLANK(val)) { + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; + } + if (val == 0) return(1); + + if (!IS_LETTER(val) && !IS_DIGIT(val) && + (val != '.') && (val != '-') && + (val != '_') && (val != ':') && + (!IS_COMBINING(val)) && + (!IS_EXTENDER(val))) return(0); - while ((IS_LETTER(*cur)) || (IS_DIGIT(*cur)) || - (*cur == '.') || (*cur == '-') || - (*cur == '_') || (*cur == ':') || - (IS_COMBINING(*cur)) || - (IS_EXTENDER(*cur))) - cur++; + while ((IS_LETTER(val)) || (IS_DIGIT(val)) || + (val == '.') || (val == '-') || + (val == '_') || (val == ':') || + (IS_COMBINING(val)) || + (IS_EXTENDER(val))) { + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; + } } - if (*cur != 0) return(0); + if (val != 0) return(0); return(1); } |