aboutsummaryrefslogtreecommitdiffstats
path: root/uri.c
diff options
context:
space:
mode:
authorDaniel Veillard <veillard@src.gnome.org>2000-09-19 12:25:59 +0000
committerDaniel Veillard <veillard@src.gnome.org>2000-09-19 12:25:59 +0000
commit4fb87ee5858178aa040c30b14a16f82f8cb76276 (patch)
tree046c9f9a1bd80488ae47173dc152b5b44739fcd7 /uri.c
parentd5f97f80774c0557cf74c633cc2786b56c27ccd7 (diff)
downloadandroid_external_libxml2-4fb87ee5858178aa040c30b14a16f82f8cb76276.tar.gz
android_external_libxml2-4fb87ee5858178aa040c30b14a16f82f8cb76276.tar.bz2
android_external_libxml2-4fb87ee5858178aa040c30b14a16f82f8cb76276.zip
Various contributed patches:
- uri.c: applied patch for URI escaping from Wayne Davison <wayned@blorf.net> - tree.c parserInternals.c HTMLparser.c: memset checks patches from Denis Barbier <barbier@imacs.polytechnique.fr> - HTMLparser.c: UTF8 characters in HTML tag-attribute values patch from Wayne Davison Daniel
Diffstat (limited to 'uri.c')
-rw-r--r--uri.c138
1 files changed, 24 insertions, 114 deletions
diff --git a/uri.c b/uri.c
index ec915e0b..bc77690c 100644
--- a/uri.c
+++ b/uri.c
@@ -254,26 +254,11 @@ xmlSaveUri(xmlURIPtr uri) {
((*(p) == '+')) || ((*(p) == '$')) || ((*(p) == ',')))
ret[len++] = *p++;
else {
- int val = *p++;
+ int val = *(unsigned char *)p++;
+ int hi = val / 0x10, lo = val % 0x10;
ret[len++] = '%';
- switch (val / 0x10) {
- case 0xF: ret[len++] = 'F'; break;
- case 0xE: ret[len++] = 'E'; break;
- case 0xD: ret[len++] = 'D'; break;
- case 0xC: ret[len++] = 'C'; break;
- case 0xB: ret[len++] = 'B'; break;
- case 0xA: ret[len++] = 'A'; break;
- default: ret[len++] = '0' + (val / 0x10);
- }
- switch (val % 0x10) {
- case 0xF: ret[len++] = 'F'; break;
- case 0xE: ret[len++] = 'E'; break;
- case 0xD: ret[len++] = 'D'; break;
- case 0xC: ret[len++] = 'C'; break;
- case 0xB: ret[len++] = 'B'; break;
- case 0xA: ret[len++] = 'A'; break;
- default: ret[len++] = '0' + (val % 0x10);
- }
+ ret[len++] = hi + (hi > 9? 'A'-10 : '0');
+ ret[len++] = lo + (lo > 9? 'A'-10 : '0');
}
}
if (len >= max) {
@@ -314,26 +299,11 @@ xmlSaveUri(xmlURIPtr uri) {
((*(p) == ',')))
ret[len++] = *p++;
else {
- int val = *p++;
+ int val = *(unsigned char *)p++;
+ int hi = val / 0x10, lo = val % 0x10;
ret[len++] = '%';
- switch (val / 0x10) {
- case 0xF: ret[len++] = 'F'; break;
- case 0xE: ret[len++] = 'E'; break;
- case 0xD: ret[len++] = 'D'; break;
- case 0xC: ret[len++] = 'C'; break;
- case 0xB: ret[len++] = 'B'; break;
- case 0xA: ret[len++] = 'A'; break;
- default: ret[len++] = '0' + (val / 0x10);
- }
- switch (val % 0x10) {
- case 0xF: ret[len++] = 'F'; break;
- case 0xE: ret[len++] = 'E'; break;
- case 0xD: ret[len++] = 'D'; break;
- case 0xC: ret[len++] = 'C'; break;
- case 0xB: ret[len++] = 'B'; break;
- case 0xA: ret[len++] = 'A'; break;
- default: ret[len++] = '0' + (val % 0x10);
- }
+ ret[len++] = hi + (hi > 9? 'A'-10 : '0');
+ ret[len++] = lo + (lo > 9? 'A'-10 : '0');
}
}
if (len + 3 >= max) {
@@ -396,26 +366,11 @@ xmlSaveUri(xmlURIPtr uri) {
((*(p) == '=')) || ((*(p) == '+')))
ret[len++] = *p++;
else {
- int val = *p++;
+ int val = *(unsigned char *)p++;
+ int hi = val / 0x10, lo = val % 0x10;
ret[len++] = '%';
- switch (val / 0x10) {
- case 0xF: ret[len++] = 'F'; break;
- case 0xE: ret[len++] = 'E'; break;
- case 0xD: ret[len++] = 'D'; break;
- case 0xC: ret[len++] = 'C'; break;
- case 0xB: ret[len++] = 'B'; break;
- case 0xA: ret[len++] = 'A'; break;
- default: ret[len++] = '0' + (val / 0x10);
- }
- switch (val % 0x10) {
- case 0xF: ret[len++] = 'F'; break;
- case 0xE: ret[len++] = 'E'; break;
- case 0xD: ret[len++] = 'D'; break;
- case 0xC: ret[len++] = 'C'; break;
- case 0xB: ret[len++] = 'B'; break;
- case 0xA: ret[len++] = 'A'; break;
- default: ret[len++] = '0' + (val % 0x10);
- }
+ ret[len++] = hi + (hi > 9? 'A'-10 : '0');
+ ret[len++] = lo + (lo > 9? 'A'-10 : '0');
}
}
}
@@ -436,26 +391,11 @@ xmlSaveUri(xmlURIPtr uri) {
((*(p) == ',')))
ret[len++] = *p++;
else {
- int val = *p++;
+ int val = *(unsigned char *)p++;
+ int hi = val / 0x10, lo = val % 0x10;
ret[len++] = '%';
- switch (val / 0x10) {
- case 0xF: ret[len++] = 'F'; break;
- case 0xE: ret[len++] = 'E'; break;
- case 0xD: ret[len++] = 'D'; break;
- case 0xC: ret[len++] = 'C'; break;
- case 0xB: ret[len++] = 'B'; break;
- case 0xA: ret[len++] = 'A'; break;
- default: ret[len++] = '0' + (val / 0x10);
- }
- switch (val % 0x10) {
- case 0xF: ret[len++] = 'F'; break;
- case 0xE: ret[len++] = 'E'; break;
- case 0xD: ret[len++] = 'D'; break;
- case 0xC: ret[len++] = 'C'; break;
- case 0xB: ret[len++] = 'B'; break;
- case 0xA: ret[len++] = 'A'; break;
- default: ret[len++] = '0' + (val % 0x10);
- }
+ ret[len++] = hi + (hi > 9? 'A'-10 : '0');
+ ret[len++] = lo + (lo > 9? 'A'-10 : '0');
}
}
}
@@ -482,26 +422,11 @@ xmlSaveUri(xmlURIPtr uri) {
if ((IS_UNRESERVED(*(p))) || (IS_RESERVED(*(p))))
ret[len++] = *p++;
else {
- int val = *p++;
+ int val = *(unsigned char *)p++;
+ int hi = val / 0x10, lo = val % 0x10;
ret[len++] = '%';
- switch (val / 0x10) {
- case 0xF: ret[len++] = 'F'; break;
- case 0xE: ret[len++] = 'E'; break;
- case 0xD: ret[len++] = 'D'; break;
- case 0xC: ret[len++] = 'C'; break;
- case 0xB: ret[len++] = 'B'; break;
- case 0xA: ret[len++] = 'A'; break;
- default: ret[len++] = '0' + (val / 0x10);
- }
- switch (val % 0x10) {
- case 0xF: ret[len++] = 'F'; break;
- case 0xE: ret[len++] = 'E'; break;
- case 0xD: ret[len++] = 'D'; break;
- case 0xC: ret[len++] = 'C'; break;
- case 0xB: ret[len++] = 'B'; break;
- case 0xA: ret[len++] = 'A'; break;
- default: ret[len++] = '0' + (val % 0x10);
- }
+ ret[len++] = hi + (hi > 9? 'A'-10 : '0');
+ ret[len++] = lo + (lo > 9? 'A'-10 : '0');
}
}
}
@@ -528,26 +453,11 @@ xmlSaveUri(xmlURIPtr uri) {
if ((IS_UNRESERVED(*(p))) || (IS_RESERVED(*(p))))
ret[len++] = *p++;
else {
- int val = *p++;
+ int val = *(unsigned char *)p++;
+ int hi = val / 0x10, lo = val % 0x10;
ret[len++] = '%';
- switch (val / 0x10) {
- case 0xF: ret[len++] = 'F'; break;
- case 0xE: ret[len++] = 'E'; break;
- case 0xD: ret[len++] = 'D'; break;
- case 0xC: ret[len++] = 'C'; break;
- case 0xB: ret[len++] = 'B'; break;
- case 0xA: ret[len++] = 'A'; break;
- default: ret[len++] = '0' + (val / 0x10);
- }
- switch (val % 0x10) {
- case 0xF: ret[len++] = 'F'; break;
- case 0xE: ret[len++] = 'E'; break;
- case 0xD: ret[len++] = 'D'; break;
- case 0xC: ret[len++] = 'C'; break;
- case 0xB: ret[len++] = 'B'; break;
- case 0xA: ret[len++] = 'A'; break;
- default: ret[len++] = '0' + (val % 0x10);
- }
+ ret[len++] = hi + (hi > 9? 'A'-10 : '0');
+ ret[len++] = lo + (lo > 9? 'A'-10 : '0');
}
}
}