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) { switch (scan_stat) {
case 0: 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; break;
@ -1302,7 +1309,16 @@ static php_iconv_err_t _php_iconv_mime_decode(smart_str *pretval, const char *st
break; break;
case 2: /* charset name */ 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]; char tmpbuf[80];
if (csname == NULL) { if (csname == NULL) {
@ -1338,8 +1354,6 @@ static php_iconv_err_t _php_iconv_mime_decode(smart_str *pretval, const char *st
#endif #endif
goto out; goto out;
} }
scan_stat = 3;
} }
break; break;
@ -1438,6 +1452,12 @@ static php_iconv_err_t _php_iconv_mime_decode(smart_str *pretval, const char *st
goto out; goto out;
} }
break; break;
case 10: /* language spec */
if (*p1 == '?') {
scan_stat = 3;
}
break;
} }
} }

Loading…
Cancel
Save