#19315 [Opn->Fbk]: getimagesize results wrong sizes

From: Date: Mon, 09 Sep 2002 13:16:11 +0000
Subject: #19315 [Opn->Fbk]: getimagesize results wrong sizes
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-18782@lists.php.net to get a copy of this message
ID: 19315 Updated by: derick@php.net Reported By: alberty@neptunelabs.de -Status: Open +Status: Feedback Bug Type: GetImageSize related Operating System: i686-pc-linux-gnu PHP Version: 4CVS-2002-09-09 -Assigned To: +Assigned To: derick New Comment: Can you post an unified diff (diff -u)? Derick Previous Comments: ------------------------------------------------------------------------ [2002-09-09 08:11:52] alberty@neptunelabs.de Hi, the new feature of getimagesize to results the size of compressed swf files results in the most cases wrong results, because the current function try to get only a part of the compressed file. You can validate the problem with files in macromedias trial version of flash, found in X:\Program Files\Macromedia\Flash MX\Samples\SWF (eg:360_degrees.swf,Clock.swf,Drawing.swf,Import_video.swf) Regards, Steve here a possible working patch: ------------------------------ 205,214c205,213 < static struct gfxinfo *php_handle_swc(php_stream * stream TSRMLS_DC) < { < struct gfxinfo *result = NULL; < < long bits; < unsigned char a[64]; < unsigned long len = 64; < char *b; < < b = ecalloc (1, len + 1); --- > static struct gfxinfo *php_handle_swc(php_stream * stream TSRMLS_DC) > { > struct gfxinfo *result = NULL; > > long bits; > unsigned long length; > char *b; > char *ccontents; > int clen; 216,217c215,232 < result = (struct gfxinfo *) ecalloc (1, sizeof (struct gfxinfo)); < php_stream_seek(stream, 5, SEEK_CUR); --- > result = (struct gfxinfo *) ecalloc (1, sizeof (struct gfxinfo)); > > php_stream_seek(stream, 5, SEEK_CUR); > > if ((clen = php_stream_copy_to_mem(stream, &ccontents, PHP_STREAM_COPY_ALL, 0)) > 0) > { > length=clen*2; > b= ecalloc (1, length + 1); > uncompress (b, &length, ccontents, clen); > > bits = php_swf_get_bits (b, 0, 5); > result->width = (php_swf_get_bits (b, 5 + bits, bits) - > php_swf_get_bits (b, 5, bits)) / 20; > result->height = (php_swf_get_bits (b, 5 + (3 * bits), bits) - > php_swf_get_bits (b, 5 + (2 * bits), bits)) / 20; > efree (b); > > } 219,220c234,236 < php_stream_read(stream, a, sizeof(a)); /* fread(a, sizeof(a), 1, fp); */ < uncompress (b, &len, a, sizeof(a)); --- > result->bits = 0; > result->channels = 0; > return result; 222,230d237 < bits = php_swf_get_bits (b, 0, 5); < result->width = (php_swf_get_bits (b, 5 + bits, bits) - < php_swf_get_bits (b, 5, bits)) / 20; < result->height = (php_swf_get_bits (b, 5 + (3 * bits), bits) - < php_swf_get_bits (b, 5 + (2 * bits), bits)) / 20; < efree (b); < result->bits = 0; < result->channels = 0; < return result; ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=19315&edit=1

« previous php.bugs (#18782) next »