|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2003-11-18 15:24 UTC] iliaa@php.net
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Oct 24 03:00:02 2025 UTC |
Description: ------------ Hi, There's a little bug with strings serialization, for strings containing characters with ascii code greater than 127 (with HP-UX v11). We found that the problem is located in function : php_wddx_serialize_string. There is a line of code like : if (iscntrl((int)*p) { When casting character (*p) to int for values greater than 127 (witch are considered negative) there is a sign extension so character '?'(ascii code 0xf0) become integer 0xfffffff0. But the function iscntrl expects an integrer between 0 and 255, or the result is unpredictable. The problem can be fixed by modifying the line above like : if(iscntrl((int)(unsigned char)*p) { Best Regards Pierre-Marie MOULIERE Reproduce code: --------------- <?php print "<u>Without locale :</u><br><br>"; print "???????????? ??????????? ? ?" . "<br>\n"; print wddx_deserialize(wddx_serialize_value("???????????? ??????????? ? ?")); print "<br><hr><br>"; print "<u>With locale (fr_FR.iso88591) :</u><br><br>"; setlocale(LC_CTYPE, "fr_FR.iso88591"); print "???????????? ??????????? ? ?" . "<br>\n"; print wddx_deserialize(wddx_serialize_value("???????????? ??????????? ? ?")); ?> Expected result: ---------------- Result : Without locale : ???????????? ??????????? ? ? ???????????? ??????????? ? ? ----------------------------------------------------------- With locale (fr_FR.iso88591) : ???????????? ??????????? ? ? ???????????? ??????????? ? ? Actual result: -------------- Result : Without locale : ???????????? ??????????? ? ? ???????????? ??????????? ? ? ----------------------------------------------------------- With locale (fr_FR.iso88591) : ???????????? ??????????? ? ? ???????????? ??????????? ? ?