|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2009-05-15 03:29 UTC] astax dot t at gmail dot com
Description:
------------
When used with "Q" scheme, iconv_mime_encode produces wrong results, crashes of hangs. I suspect this happens with long (though not VERY long) strings.
Lines are not correctly wrapped with "line-break-chars" parameter.
In reproduce code note missing linebreaks in encoded string and duplicated second word in decoded string.
Reproduce code:
---------------
// Content below is in Windows-1251 charset
$str = '?????? "???????-?????????" ??? "?????????" ??? ???????????';
$par = array(
'scheme' => 'Q',
'input-charset' => 'CP1251',
'output-charset' => 'CP1251',
'line-length' => 74,
);
$res = iconv_mime_encode('Subject', $str, $par);
echo $res."\n";
$res = iconv_mime_decode($res, ICONV_MIME_DECODE_CONTINUE_ON_ERROR, 'CP1251');
echo $res."\n";
=================================================================
Second example:
$str = '???? ???? ???? ???? ???? ???? ???? ???? ???? ???? ???? ???? ???? ???? ????';
$par = array(
'scheme' => 'Q',
'input-charset' => 'CP1251',
'output-charset' => 'CP1251',
);
$res = iconv_mime_encode('Subject', $str, $par);
echo $res."\n";
Expected result:
----------------
Subject: =?CP1251?Q?=D4=E8=EB=E8?==?CP1251?Q?=E0=EB=20?==?CP1251?Q?"?= =?CP1251?Q?=C7=E0=EF=E0=E4=ED=EE-=D1=E8=E1=E8=F0=F1=EA=E8=E9"=20=CE=C0=CE?= =?CP1251?Q?=20"=D1=EE=E1=E8=ED=E1=E0=ED=EA"=20=F0=E0=E4=20=EF=F0?= =?CP1251?Q?=E5=E4=F1=F2=E0=E2=E8=F2=FC?= Subject: ?????? "???????-?????????" ??? "?????????" ??? ???????????
=================================================================
Second example:
expected encoded string to be displayed
Actual result:
--------------
Subject: =?CP1251?Q?=D4=E8=EB=E8?==?CP1251?Q?=E0=EB=20?==?CP1251?Q?"=C7=E0=EF=E0=E4=ED?==?CP1251?Q?"=C7=E0=EF=E0=E4=ED=EE-=D1=E8=E1=E8=F0=F1=EA=E8=E9"=20=CE=C0=CE=20"=D1=EE=E1=E8=ED=E1=E0=ED=EA"=20=F0=E0=E4=20=EF=F0=E5=E4=F1=F2=E0=E2=E8=F2=FC?=
Subject: ?????? "??????"???????-?????????" ??? "?????????" ??? ???????????
=================================================================
Second example:
PHP hangs
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Oct 25 04:00:01 2025 UTC |
// PHP version: 5.3.0 echo 'PHP version: ' . phpversion(); $subject = base64_decode('VEVTVCDigJMg0KMg0L3QsNGBINC10YHRgtGMINGC0L4sINGH0YLQviDQktCw0Lwg0L3Rg9C20L3QviAtIFRFU1Q='); $preferences = array( 'line-length' => 500, 'input-charset' => 'UTF-8', 'output-charset' => 'UTF-8', 'scheme' => 'Q' ); $result = iconv_mime_encode('Subject', $subject, $preferences); // OK: $result = string var_dump($result); $preferences = array( 'line-length' => 76, 'input-charset' => 'UTF-8', 'output-charset' => 'UTF-8', 'scheme' => 'Q' ); $result = iconv_mime_encode('Subject', $subject, $preferences); // WRONG: $result = FALSE var_dump($result);I'd like to test the patch described in #50954. Is it included into any PHP build already? Sorry, I don't feel like compiling PHP from sources. Here is one more reproduce code: $str = base64_decode("1Ojr6ODrICLH4O/g5O3uLdHo4ejw8ero6SIgzsDOICLR7uHo7eHg7eoiIPDg5CDv8OXk8fLg4ujy/A=="); $par = array( 'scheme' => 'Q', 'input-charset' => 'CP1251', 'output-charset' => 'CP1251', 'line-length' => 74, ); $res = iconv_mime_encode('Subject', $str, $par); $res = iconv_mime_decode($res, ICONV_MIME_DECODE_CONTINUE_ON_ERROR, 'CP1251'); echo 'Result: Length='.strlen($res)." ".$res."\n"; $expected = "Subject: ".$str; echo 'Expected: Length='.strlen($expected)." ".$expected."\n"; It says result length is 74 chars and expected is 67.