ID:               27428
 User updated by:  black at scene-si dot org
 Reported By:      black at scene-si dot org
 Status:           Open
 Bug Type:         Strings related
 Operating System: debian unstable
 PHP Version:      Irrelevant
 New Comment:

i've also tried using mysql_real_escape_string, but it didnt solve
anything (for long anyway, the garbage output came back at the worst of
moments.)



the phpinfo above is still valid - any help would be appreciated, as i
really dont know what to do


Previous Comments:
------------------------------------------------------------------------

[2004-02-27 20:31:55] black at scene-si dot org

Description:
------------
The following has been tested on:



php-4.3.2               

php-4.3.4               

php-4.3.5rc2

php-4.3.5rc3

php4-STABLE-200310032330

php4-STABLE-200402101030

php4-STABLE-200402272030



with various compile options turned on/off (oracle support &
turckmmcache), always giving same result



basically with every version of this some or most serialize() calls
result in an incorrectlly constructed serialized string... given i only
input plaintext, the serialized string must have a length of
6+strlen(original), albeit:



["cache_data"]=> string(9277) "s:9309:"... (oops!)

["cache_data"]=> string(24259) "s:24248:"... (correct.)

["cache_data"]=> string(23850) "s:23881:"... (oops!)

["cache_data"]=> string(224081) "s:224069:"... (correct.)

["cache_data"]=> string(21055) "s:21107:"... (WTF!)

["cache_data"]=> string(19590) "s:19663:"... (wrong)

...



http://scene-si.org/test.tgz - 800kb, contains 15Mb output of the
reproduce code.

http://193.77.198.80/phpinfo.php for phpinfo()



Linux dahim 2.4.23-1-686 #1 Sun Nov 30 20:51:10 EST 2003 i686 GNU/Linux
(thats the server this runs on).



the funny part is, that this code (the same code to generate the
entries in condor_dbcache) works also on other servers, also debian,
iis, apache-win, redhat, mandrake, openbsd, freebsd.. it only fucked
here..



after the serialize is done, the ONLY command it goes trough is
mysql_escape_string, so there is no character or other conversions
which could explain the wrong length in serialized() output

Reproduce code:
---------------
<?php

mysql_pconnect("localhost","root","");

mysql_select_db("condor");



$query = mysql_query("select * from condor_dbcache");

while ($row = mysql_fetch_assoc($query)) {

        var_dump($row);

        var_dump(unserialize($row['cache_data']));

}



// unserialize throws out crap after serialized data end

Expected result:
----------------
I dont want the "; and crap after it displayed.. but more accurately..
i want serialize to behave propperly here.



since i never had this problem, i pressume its a system dependant
problem, i guess you'll want this:



Reading specs from /usr/lib/gcc-lib/i486-linux/3.3.3/specs

Configured with: ../src/configure -v
--enable-languages=c,c++,java,f77,pascal,objc,ada,treelang
--prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info
--with-gxx-include-dir=/usr/include/c++/3.3 --enable-shared
--with-system-zlib --enable-nls --without-included-gettext
--enable-__cxa_atexit --enable-clocale=gnu --enable-debug
--enable-java-gc=boehm --enable-java-awt=xlib --enable-objc-gc
i486-linux

Thread model: posix

gcc version 3.3.3 (Debian)



if you need some other application version or lib version, comment - or
atleast tell on what libs this depends.

Actual result:
--------------
Content starts with ei: 's:9309:"<table wid' and ends with '<br><br>";'
... but the content length is 9277..



the content was input with serialize in the following way:



$content = serialize($content);

mysql_query("update condor_dbcache set cache_timestamp='".time()."',
cache_data='".mysql_escape_string($content)."' where
cache_filename='".mysql_escape_string($filename)."'");



filename beeing the correspondant key to this dbcache table.


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


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

Reply via email to