Fixed bug #51250 (iconv_mime_decode() does not ignore malformed Q-encoded words)

This commit is contained in:
Ilia Alshanetsky 2010-12-01 14:03:36 +00:00
parent a45631d966
commit 19a0263e65
2 changed files with 32 additions and 3 deletions

View file

@ -1762,10 +1762,10 @@ static php_iconv_err_t _php_iconv_mime_decode(smart_str *pretval, const char *st
if ((mode & PHP_ICONV_MIME_DECODE_CONTINUE_ON_ERROR)) {
/* pass the entire chunk through the converter */
err = _php_iconv_appendl(pretval, encoded_word, (size_t)(p1 - encoded_word), cd_pl);
if (err != PHP_ICONV_ERR_SUCCESS) {
goto out;
}
encoded_word = NULL;
if (err != PHP_ICONV_ERR_SUCCESS) {
break;
}
} else {
goto out;
}

View file

@ -0,0 +1,29 @@
--TEST--
Bug #51250 (iconv_mime_decode() does not ignore malformed Q-encoded words)
--SKIPIF--
<?php extension_loaded('iconv') or die('skip iconv extension is not available'); ?>
--FILE--
<?php
$m = ICONV_MIME_DECODE_CONTINUE_ON_ERROR;
var_dump(iconv_mime_decode("Legal encoded-word: =?utf-8?B?Kg==?= .", $m));
var_dump(iconv_mime_decode("Legal encoded-word: =?utf-8?Q?*?= .", $m));
var_dump(iconv_mime_decode("Illegal encoded-word: =?utf-8?B?".chr(0xA1)."?= .", $m));
var_dump(iconv_mime_decode("Illegal encoded-word: =?utf-8?Q?".chr(0xA1)."?= .", $m));
var_dump(iconv_mime_decode("Legal encoded-word: =?utf-8?B?Kg==?= ."));
var_dump(iconv_mime_decode("Legal encoded-word: =?utf-8?Q?*?= ."));
var_dump(iconv_mime_decode("Illegal encoded-word: =?utf-8?B?".chr(0xA1)."?= ."));
var_dump(iconv_mime_decode("Illegal encoded-word: =?utf-8?Q?".chr(0xA1)."?= ."));
?>
--EXPECTF--
string(23) "Legal encoded-word: * ."
string(23) "Legal encoded-word: * ."
string(24) "Illegal encoded-word: ."
string(23) "Illegal encoded-word: ."
string(23) "Legal encoded-word: * ."
string(23) "Legal encoded-word: * ."
string(24) "Illegal encoded-word: ."
Notice: iconv_mime_decode(): Detected an illegal character in input string in %s on line %d
bool(false)