]> granicus.if.org Git - php/commitdiff
Possible fix for bug #26391 (parse_url() destroys strings that contain
authorMoriyoshi Koizumi <moriyoshi@php.net>
Wed, 3 Dec 2003 20:58:12 +0000 (20:58 +0000)
committerMoriyoshi Koizumi <moriyoshi@php.net>
Wed, 3 Dec 2003 20:58:12 +0000 (20:58 +0000)
a character in range of \x80-\xff))

ext/standard/url.c

index 419b8146e9088ce6ddc883c900b1cb1efb85d5fb..1ae3e7e61905efd78d263d37456ff8b47785d4da 100644 (file)
@@ -104,7 +104,7 @@ PHPAPI php_url *php_url_parse(char *str)
                         * correctly parse things like a.com:80
                         */
                        p = e + 1;
-                       while (isdigit(*p)) {
+                       while (isdigit((int)*(unsigned char *)p)) {
                                p++;
                        }
                        
@@ -151,7 +151,7 @@ PHPAPI php_url *php_url_parse(char *str)
                p = e + 1;
                pp = p;
                
-               while (pp-p < 6 && isdigit(*pp)) {
+               while (pp-p < 6 && isdigit((int)*(unsigned char *)pp)) {
                        pp++;
                }
                
@@ -336,12 +336,12 @@ static int php_htoi(char *s)
        int value;
        int c;
 
-       c = s[0];
+       c = ((unsigned char *)s)[0];
        if (isupper(c))
                c = tolower(c);
        value = (c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10) * 16;
 
-       c = s[1];
+       c = ((unsigned char *)s)[1];
        if (isupper(c))
                c = tolower(c);
        value += c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10;
@@ -457,7 +457,7 @@ PHPAPI int php_url_decode(char *str, int len)
        while (len--) {
                if (*data == '+')
                        *dest = ' ';
-               else if (*data == '%' && len >= 2 && isxdigit((int) *(data + 1)) && isxdigit((int) *(data + 2))) {
+               else if (*data == '%' && len >= 2 && isxdigit((int) *(unsigned char *)(data + 1)) && isxdigit((int) *(unsigned char *)(data + 2))) {
 #ifndef CHARSET_EBCDIC
                        *dest = (char) php_htoi(data + 1);
 #else
@@ -605,7 +605,7 @@ no_name_header:
                                c = *p;
                                *p = '\0';
                                s = p + 1;
-                               while (isspace(*s)) {
+                               while (isspace((int)*(unsigned char *)s)) {
                                        s++;
                                }