ID: 48840 User updated by: schindler dot andor at pokhalo dot hu 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:
As i seed, all tokens of a serialized data are only ascii characters except this \0 character (or the data, if it's not a string). (If it uses anything else, then i take back what i said). So, i don't understand, why can't be the serialize() function binary safe. It is possible to review the design of serialize(), maybe? -- The another serialization formats which i need to use before was text based format. Ok, it's maybe just by an accident. Previous Comments: ------------------------------------------------------------------------ [2009-07-07 21:26:04] [email protected] 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. ------------------------------------------------------------------------ [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] [email protected] 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
