#48840 [Bgs]: serialized object: data loss in some use case

From: Date: Tue, 07 Jul 2009 21:26:05 +0000
Subject: #48840 [Bgs]: serialized object: data loss in some use case
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-139446@lists.php.net to get a copy of this message
ID: 48840 Updated by: rasmus@php.net Reported By: schindler dot andor at pokhalo dot hu Status: Bogus Bug Type: Class/Object related Operating System: * PHP Version: 5.2.10 New Comment: Hrm, I am not sure where you get the impression that serialization must produce non-binary data. serialize() has always been for generating a way to freeze and store a PHP data object in a manner where it can be unserialized back to its original form. That is also whatthe documentation says. It has never promised to do more than that. If your transport medium is not binary safe, then it is your responsibility to figure out how to encode the serialized blob for your specific medium. Previous Comments: ------------------------------------------------------------------------ [2009-07-07 21:08:24] schindler dot andor at pokhalo dot hu And what can i do? base64_encode()/base64_decode() is ridiculous for this example. I can use pg_escape_bytea() too, but the result of serialized anything shouldn't to be a binary data. I think a serialization method mustn't use special characters, so i think, it's a design bug. ------------------------------------------------------------------------ [2009-07-07 20:41:27] jani@php.net Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php ------------------------------------------------------------------------ [2009-07-07 19:45:36] schindler dot andor at pokhalo dot hu Description: ------------ If i serialize a PHP object, then become some \0 characters in property's field name. This cause some problems, where others using char* instead of smart_str. Example: If i try escape a serialized object's string with pg_escape_string() then i give a truncated string, because the PQescapeStringConn()/PQescapeString() terminate the processing at the \0 character. Reproduce code: --------------- class aClass { private $a; public function __construct() { $this->a = 1; } } $obj = new aClass(); $str = serialize($obj); // gives: 'O:6:"aClass":1:{s:9:"#aClass#a";i:1;}' // (i marked \0's places with a #) echo $str; $conn = pg_connect('...'); // gives: 'O:6:"aClass":1:{s:9:"' echo pg_escape_string($conn, $str); Expected result: ---------------- I think it would be better, if the serialize don't give \0. I think, it's can not be problem, if serialize uses # or anything instead of \0. Actual result: -------------- See code. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=48840&edit=1

« previous php.bugs (#139446) next »