diff options
author | corvid <corvid@lavabit.com> | 2011-11-11 04:26:41 +0000 |
---|---|---|
committer | corvid <corvid@lavabit.com> | 2011-11-11 04:26:41 +0000 |
commit | 980fe05f47b9d6dd8626b5ea021e2c16807ff5ca (patch) | |
tree | 2e5670d74d8fcfb8e7f6b84ffaf5f77b74855746 /dpi/dpiutil.c | |
parent | 119aa95ed6bc612dd4ef7a3121d9bf220148aaa4 (diff) |
locale-independent ASCII character case handling
Basically, I and i are different letters in Turkic languages, and this
causes problems for str(n)casecmp and toupper/tolower in these locales
when dillo is dealing with ASCII.
Diffstat (limited to 'dpi/dpiutil.c')
-rw-r--r-- | dpi/dpiutil.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/dpi/dpiutil.c b/dpi/dpiutil.c index e29d529f..45100be2 100644 --- a/dpi/dpiutil.c +++ b/dpi/dpiutil.c @@ -68,8 +68,10 @@ char *Unescape_uri_str(const char *s) if (strchr(s, '%')) { for (p = buf; (*p = *s); ++s, ++p) { if (*p == '%' && isxdigit(s[1]) && isxdigit(s[2])) { - *p = (isdigit(s[1]) ? (s[1] - '0') : toupper(s[1]) - 'A' + 10)*16; - *p += isdigit(s[2]) ? (s[2] - '0') : toupper(s[2]) - 'A' + 10; + *p = (isdigit(s[1]) ? (s[1] - '0') + : D_ASCII_TOUPPER(s[1]) - 'A' + 10) * 16; + *p += isdigit(s[2]) ? (s[2] - '0') + : D_ASCII_TOUPPER(s[2]) - 'A' + 10; s += 2; } } @@ -121,7 +123,7 @@ char *Unescape_html_str(const char *str) for (i = 0, j = 0; str[i]; ++i) { if (str[i] == '&') { for (k = 0; k < 5; ++k) { - if (!dStrncasecmp(str + i, unsafe_rep[k], unsafe_rep_len[k])) { + if (!dStrnAsciiCasecmp(str + i, unsafe_rep[k], unsafe_rep_len[k])) { i += unsafe_rep_len[k] - 1; break; } @@ -154,7 +156,8 @@ char *Filter_smtp_hack(char *url) memmove(url + i, url + i + 1, strlen(url + i)); --i; } else if (c == '%' && url[i+1] == '0' && - (tolower(url[i+2]) == 'a' || tolower(url[i+2]) == 'd')) { + (D_ASCII_TOLOWER(url[i+2]) == 'a' || + D_ASCII_TOLOWER(url[i+2]) == 'd')) { memmove(url + i, url + i + 3, strlen(url + i + 2)); --i; } |