#43854 [Com]: Wrong length calculation in serialize S type

From: Date: Tue, 03 Jun 2008 17:29:42 +0000
Subject: #43854 [Com]: Wrong length calculation in serialize S type
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-125466@lists.php.net to get a copy of this message
ID: 43854 Comment by: sweetiepiekiara at yahoo dot com Reported By: tomasz dot rutkowski at domeny dot pl Status: No Feedback Bug Type: Arrays related Operating System: Linux PHP Version: 5.2.5 New Comment: wats up Previous Comments: ------------------------------------------------------------------------ [2008-01-15 17:17:57] felipe@php.net Clarifying... The last code. (Prepared array) ------------------------------------------------------------------------ [2008-01-15 16:12:04] felipe@php.net The example works fine in PHP5.2.5, 5.2.6, 5.3. ------------------------------------------------------------------------ [2008-01-15 15:32:04] tomasz dot rutkowski at domeny dot pl Sorry Bad: Perhaps it is liberty problem. Good: Probably it is a library problem. ------------------------------------------------------------------------ [2008-01-15 15:24:56] tomasz dot rutkowski at domeny dot pl Sorry but I can't reconstruct this bug. Admin change PHP verions on my demand. This is productive server and they can't back to error version. On similar server this bug is not reported :( Perhaps it is liberty problem. Example code: <?php /* Error string from DB */ $bad_serialize = 'a:3:{i:0;a:4:{i:0;a:7:{i:0;i:69;i:1;s:30:"Lakier do wzork&#243;w czarny 10ml";i:2;d:19.980000000000000426325641456060111522674560546875;i:3;i:1;i:4;d:19.980000000000000426325641456060111522674560546875;i:5;s:0:"";i:6;s:2:"82";}i:1;a:7:{i:0;i:70;i:1;s:43:"Lakier do wzork&#243;w czarny per&#322;owy 10ml";i:2;d:19.980000000000000426325641456060111522674560546875;i:3;i:1;i:4;d:19.980000000000000426325641456060111522674560546875;i:5;s:0:"";i:6;s:2:"99";}i:2;a:7:{i:0;i:65;i:1;s:34:"Lakier do wzork&#243;w bia&#322;y 10ml";i:2;d:19.980000000000000426325641456060111522674560546875;i:3;i:1;i:4;d:19.980000000000000426325641456060111522674560546875;i:5;s:0:"";i:6;s:2:"85";}i:3;a:7:{i:0;i:75;i:1;s:28:"Lakier utrwalaj&#261;cy 10ml";i:2;d:19.980000000000000426325641456060111522674560546875;i:3;i:1;i:4;d:19.980000000000000426325641456060111522674560546875;i:5;s:0:"";i:6;s:2:"92";}}i:1;a:3:{i:0;s:2:"75";i:1;s:28:"Lakier utrwalaj&#261;cy 10ml";i:2;d:12.9900000000000002131628207280300557613372802734375;}i:2;i:13;}'; var_dump( unserialize( $bad_serialize ) ); echo '<br />'; /* Good - fixed by me */ $fix_serialize = 'a:3:{i:0;a:4:{i:0;a:7:{i:0;i:69;i:1;s:34:"Lakier do wzork&#243;w czarny 10ml";i:2;d:19.980000000000000426325641456060111522674560546875;i:3;i:1;i:4;d:19.980000000000000426325641456060111522674560546875;i:5;s:0:"";i:6;s:2:"82";}i:1;a:7:{i:0;i:70;i:1;s:47:"Lakier do wzork&#243;w czarny per&#322;owy 10ml";i:2;d:19.980000000000000426325641456060111522674560546875;i:3;i:1;i:4;d:19.980000000000000426325641456060111522674560546875;i:5;s:0:"";i:6;s:2:"99";}i:2;a:7:{i:0;i:65;i:1;s:38:"Lakier do wzork&#243;w bia&#322;y 10ml";i:2;d:19.980000000000000426325641456060111522674560546875;i:3;i:1;i:4;d:19.980000000000000426325641456060111522674560546875;i:5;s:0:"";i:6;s:2:"85";}i:3;a:7:{i:0;i:75;i:1;s:28:"Lakier utrwalaj&#261;cy 10ml";i:2;d:19.980000000000000426325641456060111522674560546875;i:3;i:1;i:4;d:19.980000000000000426325641456060111522674560546875;i:5;s:0:"";i:6;s:2:"92";}}i:1;a:3:{i:0;s:2:"75";i:1;s:28:"Lakier utrwalaj&#261;cy 10ml";i:2;d:12.9900000000000002131628207280300557613372802734375;}i:2;i:13;}'; var_dump( unserialize( $fix_serialize ) ); echo '<br />'; /* Prepared array */ $prepare_array = array( array( array( 69, (string) "Lakier do wzork&#243;w czarny 10ml", (float) 19.98, 1, (float) 19.98, (string) "", (string) "82" ), array( 70, (string) "Lakier do wzork&#243;w czarny per&#322;owy 10ml", (float) 19.98, 1, (float) 19.98, (string) "", (string) "99" ), array( 65, "Lakier do wzork&#243;w bia&#322;y 10ml", (float) 19.98, 1, (float) 19.98, (string) "",(string) "85" ), array( 75, (string) "Lakier utrwalaj&#261;cy 10ml", (float) 19.98, 1, (float) 19.98, (string) "", (string) "92" ) ), array( (string) "75", (string) "Lakier utrwalaj&#261;cy 10ml", (float) 12.99 ), 2=> 13 ); $tmp = serialize( $prepare_array ); var_dump( unserialize( $tmp ) ); ?> ------------------------------------------------------------------------ [2008-01-15 12:12:39] felipe@php.net Thank you for this bug report. To properly diagnose the problem, we need a short but complete example script to be able to reproduce this bug ourselves. A proper reproducing script starts with <?php and ends with ?>, is max. 10-20 lines long and does not require any external resources such as databases, etc. If the script requires a database to demonstrate the issue, please make sure it creates all necessary tables, stored procedures etc. Please avoid embedding huge scripts into the report. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/43854 -- Edit this bug report at http://bugs.php.net/?id=43854&edit=1

« previous php.bugs (#125466) next »