ID:               27674
 User updated by:  xuefer at 21cn dot com
 Reported By:      xuefer at 21cn dot com
 Status:           Closed
 Bug Type:         GetImageSize related
 Operating System: *
 PHP Version:      4.3.5
 New Comment:

yes, just a guess

because no matter how much memory it alloc, uncompress() just return
Z_BUF_ERROR



i don't know why this swf is bad, it plays ok in stand alone
flashplayer and ie browser



by the way, when i test it with a "good" swf, the part of erealloc()
don't even executed. In another word, the first uncompress:

    if (uncompress(b, &len, a, sizeof(a)) != Z_OK) {

is Z_OK


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

[2004-03-27 05:58:53] [EMAIL PROTECTED]

Where does the 50MByte const come from, a guess?

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

[2004-03-26 22:09:42] xuefer at 21cn dot com

this bug may be "can't reproduce" not "closed"



this is the "fix" with testing code

Index: ext/standard/image.c

===================================================================

RCS file: /repository/php-src/ext/standard/image.c,v

retrieving revision 1.72.2.13

diff -u -r1.72.2.13 image.c

--- ext/standard/image.c        12 Nov 2003 22:56:09 -0000     
1.72.2.13

+++ ext/standard/image.c        27 Mar 2004 03:11:00 -0000

@@ -196,8 +196,8 @@

 

        long bits;

        unsigned char a[64];

-       unsigned long len=64, szlength;

-       int factor=1,maxfactor=16;

+       unsigned long len=64, szlength, maxlength = 50*1024*1024;

+       int factor=1,maxfactor=8;

        int slength, status=0;

        char *b, *buf=NULL, *bufz=NULL;

 

@@ -226,8 +226,13 @@

                

                do {

                        szlength=slength*(1<<factor++);

+                       if (szlength > maxlength) {

+                               break;

+                       }

+                       printf("szlength: %d\n", szlength);

                        buf = (char *) erealloc(buf,szlength);

                        status = uncompress(buf, &szlength, bufz,
slength);

+                       printf("status: %d\n", (int) (status ==
Z_BUF_ERROR));

                } while ((status==Z_BUF_ERROR)&&(factor<maxfactor));

                

                if (bufz) {







$ make && ./sapi/cli/php -r "var_dump(getimagesize('125-bad.swf'));"



Build complete.

(It is safe to ignore warnings about tempnam and tmpnam).



szlength: 2229880

status: 1

szlength: 4459760

status: 1

szlength: 8919520

status: 1

szlength: 17839040

status: 1

szlength: 35678080

status: 1

bool(false)

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

[2004-03-26 13:45:53] [EMAIL PROTECTED]

Both PHP4 (4.3.5) and PHP5 CVS return false with the given 

file. 

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

[2004-03-26 09:59:25] xuefer at 21cn dot com

the above test verified for php4.3.5



phpinfo() under linux:

zlib

ZLib Support => enabled

Compiled Version => 1.1.4

Linked Version => 1.1.4



but when i compile cvs version of php5, it just works

./configure --disable-all --disable-cgi

make

./sapi/cli/php -r 'var_dump(getimagesize("125-bad.swf"));'

outputs: bool(false)

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

[2004-03-26 09:11:06] xuefer at 21cn dot com

more detail:



under xp

it eat more and more memory



under linux cli:

$ php -r "getimagesize('./125-bad.swf');"

FATAL:  erealloc():  Unable to allocate -2011570176 bytes



under linux apache: it crash

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

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/27674

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

Reply via email to