Edit report at https://bugs.php.net/bug.php?id=64349&edit=1

 ID:                 64349
 Updated by:         ras...@php.net
 Reported by:        pprem at pprem dot net
 Summary:            serialize don't work with class/object
-Status:             Feedback
+Status:             Not a bug
 Type:               Bug
 Package:            Class/Object related
 Operating System:   Ubuntu 12.10
 PHP Version:        5.4.12
 Block user comment: N
 Private report:     N

 New Comment:

Nope, not a bug. From a security perspective it is safer to not output anything 
when the input cannot be parsed. You were feeding it invalid UTF8. You should 
always specify which charset your input is in when calling 
htmlentities/htmlspecialchars


Previous Comments:
------------------------------------------------------------------------
[2013-03-05 22:19:18] pprem at pprem dot net

Sorry Rasmus, I find the real problem and it's not unserialize or serialize.

I'm in France and my source files are by default in ISO-8859-1. New projects 
are 
in UTF-8, like yours by default I suppose.

I didn't see that htmlentities() has UTF-8 by default nor ISO-8859-1.

In the past,
<?php
print(htmlentities("je suis allé dans l'allée"));
?>
encoded in ISO-8859-1 worked. Now, it didn't display anything (perhaps a bug in 
htmlentities ?). If you encode in UTF-8, it works correctly.

I changed my program as this :
<?php
print(htmlentities("je suis allé dans l'allée",ENT_COMPAT,"ISO-8859-1"));
?>
and all is good.

------------------------------------------------------------------------
[2013-03-04 15:15:00] ras...@php.net

Your test script works fine here for me with PHP 5.4.13-dev

Do you have any special extensions loaded that might be affecting this?
Try it from the command line with php -n

------------------------------------------------------------------------
[2013-03-04 14:54:48] pprem at pprem dot net

Description:
------------
serialize don't work on stdClass anymore: nothing is get as return of 
serialize($test) when $test is an object

Test script:
---------------
<?php
        function test_($var) {
                $start = serialize ($var);
                $nb_ok = $nb_nok = 0;
                for ($i = 0; $i < 100; $i ++) {
                        $end = serialize(unserialize($start));
                        if ($star == $end) {
                                $nb_ok++;
                        } else {
                                $nb_nok++;
                        }
                }
                print("<p>".htmlentities($start)."<br />ok=".$nb_ok."<br 
/>nok=".$nb_nok."</p>");
        }
        test_(5);
        test_("254retet");
        test_(array(54,7,687,"ihju",24,"","52s7"));
        $test = new stdClass(); $test->bidule="57geré"; $test->truc=547; 
$test->machin=54.47; $test->chose="dsf24sdg"; test_($test);
        $test2 = new stdClass(); $test2->first="dflgid"; $test2->second=$test; 
$test2->third=2; test_($test2);
?>

Expected result:
----------------
i:5;
ok=0
nok=100

s:8:"254retet";
ok=0
nok=100

a:7:
{i:0;i:54;i:1;i:7;i:2;i:687;i:3;s:4:"ihju";i:4;i:24;i:5;s:0:"";i:6;s:4:"52s7";}
ok=0
nok=100

O:8:"stdClass":4:
{s:6:"bidule";s:6:"57geré";s:4:"truc";i:547;s:6:"machin";d:54.469999999999999;s:
5:"chose";s:8:"dsf24sdg";}
ok=0
nok=100

O:8:"stdClass":3:{s:5:"first";s:6:"dflgid";s:6:"second";O:8:"stdClass":4:
{s:6:"bidule";s:6:"57geré";s:4:"truc";i:547;s:6:"machin";d:54.469999999999999;s:
5:"chose";s:8:"dsf24sdg";}s:5:"third";i:2;}
ok=0
nok=100

Actual result:
--------------
i:5;
ok=0
nok=100

s:8:"254retet";
ok=0
nok=100

a:7:
{i:0;i:54;i:1;i:7;i:2;i:687;i:3;s:4:"ihju";i:4;i:24;i:5;s:0:"";i:6;s:4:"52s7";}
ok=0
nok=100


ok=0
nok=100


ok=0
nok=100


------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=64349&edit=1

Reply via email to