Browse Source

Fixed iconv_mime_decode() so that it comforms to RFC2231

PHP-5
Moriyoshi Koizumi 24 years ago
parent
commit
6f44489b68
  1. 42
      ext/iconv/iconv.c

42
ext/iconv/iconv.c

@ -1281,14 +1281,21 @@ static php_iconv_err_t _php_iconv_mime_decode(smart_str *pretval, const char *st
switch (scan_stat) {
case 0:
if (*p1 == '\r') {
scan_stat = 7;
} else if (*p1 == '\n') {
scan_stat = 8;
} else if (*p1 == '=') {
scan_stat = 1;
} else {
_php_iconv_appendc(pretval, *p1, cd_pl);
switch (*p1) {
case '\r':
scan_stat = 7;
break;
case '\n':
scan_stat = 8;
break;
case '=':
scan_stat = 1;
break;
default:
_php_iconv_appendc(pretval, *p1, cd_pl);
}
break;
@ -1302,7 +1309,16 @@ static php_iconv_err_t _php_iconv_mime_decode(smart_str *pretval, const char *st
break;
case 2: /* charset name */
if (*p1 == '?') {
switch (*p1) {
case '?':
scan_stat = 3;
break;
case '*':
scan_stat = 10;
break;
}
if (scan_stat != 2) {
char tmpbuf[80];
if (csname == NULL) {
@ -1338,8 +1354,6 @@ static php_iconv_err_t _php_iconv_mime_decode(smart_str *pretval, const char *st
#endif
goto out;
}
scan_stat = 3;
}
break;
@ -1438,6 +1452,12 @@ static php_iconv_err_t _php_iconv_mime_decode(smart_str *pretval, const char *st
goto out;
}
break;
case 10: /* language spec */
if (*p1 == '?') {
scan_stat = 3;
}
break;
}
}

Loading…
Cancel
Save