#19315 [Fbk->Opn]: getimagesize results wrong sizes
| From: | alberty at neptunelabs dot de | Date: | Mon, 09 Sep 2002 16:33:13 +0000 |
| Subject: | #19315 [Fbk->Opn]: getimagesize results wrong sizes | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-18825@lists.php.net to get a copy of this message | ||
ID: 19315
User updated by: alberty@neptunelabs.de
Reported By: alberty@neptunelabs.de
-Status: Feedback
+Status: Open
Bug Type: GetImageSize related
Operating System: i686-pc-linux-gnu
PHP Version: 4CVS-2002-09-09
Assigned To: derick
New Comment:
--- php4/ext/standard/image.c Mon Sep 9 14:19:09 2002
+++ image.c Mon Sep 9 14:43:17 2002
@@ -202,32 +202,39 @@
#if HAVE_ZLIB
/* {{{ php_handle_swc
*/
-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;
- 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);
+
+ }
- 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;
- 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;
}
/* }}} */
#endif
Previous Comments:
------------------------------------------------------------------------
[2002-09-09 08:16:11] derick@php.net
Can you post an unified diff (diff -u)?
Derick
------------------------------------------------------------------------
[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