]> granicus.if.org Git - php/commitdiff
fixed shift_jis character corruption including 0x5c as second byte following a slash...
authorRui Hirokawa <hirokawa@php.net>
Fri, 5 Jul 2002 15:02:40 +0000 (15:02 +0000)
committerRui Hirokawa <hirokawa@php.net>
Fri, 5 Jul 2002 15:02:40 +0000 (15:02 +0000)
ext/mbstring/mbstring.c
ext/mbstring/mbstring.h
main/rfc1867.c

index 665e72b308593443533ec299402eccb9de1e70c3..6f65855cfa02a8d77c2cb13104d31b5e179335eb 100644 (file)
@@ -1147,7 +1147,7 @@ SAPI_POST_HANDLER_FUNC(php_mbstr_post_handler)
 
 char *mbstr_strrchr(const char *s, char c TSRMLS_DC){
        unsigned char *p = (unsigned char *)s, *last = NULL;
-       while(*p++) {
+       while(*p) {
                if (*p == c) {
                        last = p;
                }
@@ -1158,11 +1158,20 @@ char *mbstr_strrchr(const char *s, char c TSRMLS_DC){
                        && IS_SJIS1(*p) && IS_SJIS2(*(p+1))) {
                        p++;
                }
+               p++;
        }
        return last;
 }
 
 
+int mbstr_is_mb_leadbyte(const char *s TSRMLS_DC){
+       unsigned char *p = (unsigned char *)s;
+       if (MBSTRG(current_language) == mbfl_no_language_japanese 
+               && IS_SJIS1(*p) && IS_SJIS2(*(p+1))){
+               return 1;
+       }
+       return 0;
+}
 
 
 /* http input processing */
index 6925980275b49e78090b3aec51ee72383959fd6a..8c3496520546f569687477f830fd6fb1319c9cc8 100644 (file)
@@ -118,6 +118,7 @@ int php_mbregex_name2mbctype(const char *pname);
 #endif
 
 char *mbstr_strrchr(const char *s, char c TSRMLS_DC);
+int mbstr_is_mb_leadbyte(const char *s TSRMLS_DC);
 
 ZEND_BEGIN_MODULE_GLOBALS(mbstring)
        int language;
index 4ac1398fe6ed7d190c212760cb28f93d0b62b5a7..52b297ff07be630f9791892fba64335cf16e843c 100644 (file)
@@ -440,8 +440,7 @@ static char *php_ap_getword(char **line, char stop)
        return res;
 }
 
-
-static char *substring_conf(char *start, int len, char quote)
+static char *substring_conf(char *start, int len, char quote  TSRMLS_DC)
 {
        char *result = emalloc(len + 2);
        char *resp = result;
@@ -452,6 +451,11 @@ static char *substring_conf(char *start, int len, char quote)
                        *resp++ = start[++i];
                } else {
                        *resp++ = start[i];
+#if HAVE_MBSTRING
+                       if (mbstr_is_mb_leadbyte(start+i) TSRMLS_CC){
+                               *resp++ = start[++i];
+                       }
+#endif
                }
        }
 
@@ -460,7 +464,7 @@ static char *substring_conf(char *start, int len, char quote)
 }
 
 
-static char *php_ap_getword_conf(char **line)
+static char *php_ap_getword_conf(char **line TSRMLS_DC)
 {
        char *str = *line, *strend, *res, quote;
 
@@ -482,7 +486,7 @@ static char *php_ap_getword_conf(char **line)
                                ++strend;
                        }
                }
-               res = substring_conf(str + 1, strend - str - 1, quote);
+               res = substring_conf(str + 1, strend - str - 1, quote TSRMLS_CC);
 
                if (*strend == quote) {
                        ++strend;
@@ -494,7 +498,7 @@ static char *php_ap_getword_conf(char **line)
                while (*strend && !isspace(*strend)) {
                        ++strend;
                }
-               res = substring_conf(str, strend - str, 0);
+               res = substring_conf(str, strend - str, 0  TSRMLS_CC);
        }
 
        while (*strend && isspace(*strend)) {
@@ -691,12 +695,12 @@ SAPI_API SAPI_POST_HANDLER_FUNC(rfc1867_post_handler)
                                                if (param) {
                                                        efree(param);
                                                }
-                                               param = php_ap_getword_conf(&pair);
+                                               param = php_ap_getword_conf(&pair TSRMLS_CC);
                                        } else if (!strcmp(key, "filename")) {
                                                if (filename) {
                                                        efree(filename);
                                                }
-                                               filename = php_ap_getword_conf(&pair);
+                                               filename = php_ap_getword_conf(&pair TSRMLS_CC);
                                        }
                                }
                                if (key) {