From: Rui Hirokawa Date: Fri, 5 Jul 2002 15:02:40 +0000 (+0000) Subject: fixed shift_jis character corruption including 0x5c as second byte following a slash... X-Git-Tag: php-4.2.3RC1~81 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7c9479388f9ce62293d6b82a97b332078997343f;p=php fixed shift_jis character corruption including 0x5c as second byte following a slash on uploaded filename. --- diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c index 665e72b308..6f65855cfa 100644 --- a/ext/mbstring/mbstring.c +++ b/ext/mbstring/mbstring.c @@ -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 */ diff --git a/ext/mbstring/mbstring.h b/ext/mbstring/mbstring.h index 6925980275..8c34965205 100644 --- a/ext/mbstring/mbstring.h +++ b/ext/mbstring/mbstring.h @@ -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; diff --git a/main/rfc1867.c b/main/rfc1867.c index 4ac1398fe6..52b297ff07 100644 --- a/main/rfc1867.c +++ b/main/rfc1867.c @@ -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) {