At 15:42 02.10.2002, Andrei Zmievski wrote: >On Wed, 02 Oct 2002, Rasmus Lerdorf wrote: > > Hrm... Actually, after a bit more checking it is only some jpegs that > > don't work. Specifically the ones coming from my digital camera are no > > longer working. Images that used to work with getimagesize() are now not, > > so I think something changed. Try running getimagesize() on this image: > > > > http://lerdorf.com/azj.jpg > >Yes, it doesn't work for me either. I don't see anything in image.c that >would have changed, so it must be something in the streams code, >perhaps?
Yes i just checked it. When i replace php_stream_seek() with php_stream_read() it works. cvs -z3 -q diff ext\standard\image.c (in directory S:\php4-HEAD\) Index: ext/standard/image.c =================================================================== RCS file: /repository/php4/ext/standard/image.c,v retrieving revision 1.69 diff -u -r1.69 image.c --- ext/standard/image.c 18 Sep 2002 20:37:24 -0000 1.69 +++ ext/standard/image.c 2 Oct 2002 14:08:12 -0000 @@ -398,6 +398,7 @@ { return M_EOI;/* we hit EOF */ } + php_error_docref( NULL TSRMLS_CC, E_NOTICE, "Reading:'0x%02X'", marker); if ( last_marker==M_COM && comment_correction>0) { if ( marker != 0xFF) @@ -436,7 +437,14 @@ length = length-2; if (length) { - php_stream_seek(stream, (long)length, SEEK_CUR); + //php_stream_seek(stream, (long)length, SEEK_CUR); + unsigned char a[1]; + + while (length) { + php_stream_read(stream, a, 1); + length--; + } + } } /* }}} */ @@ -483,6 +491,7 @@ for (;;) { marker = php_next_marker(stream, marker, 1, ff_read TSRMLS_CC); ff_read = 0; + php_error_docref( NULL TSRMLS_CC, E_NOTICE, "Marker: '0x%02X'", marker); switch (marker) { case M_SOF0: case M_SOF1: When using this patch you will see all markers: Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Reading:'0xE1' Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Marker: '0xE1' Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Reading:'0xFF' Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Reading:'0xE2' Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Marker: '0xE2' Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Reading:'0xFF' Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Reading:'0xE2' Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Marker: '0xE2' Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Reading:'0xFF' Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Reading:'0xE2' Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Marker: '0xE2' Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Reading:'0xFF' Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Reading:'0xDB' Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Marker: '0xDB' Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Reading:'0xFF' Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Reading:'0xC4' Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Marker: '0xC4' Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Reading:'0xFF' Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Reading:'0xDD' Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Marker: '0xDD' Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Reading:'0xFF' Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Reading:'0xC0' Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Marker: '0xC0' Before only the first marker was read: Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Reading:'0xE1' Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Marker: '0xE1' Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Reading:'0x60' Command line code(1) : Notice - getimagesize() [http://127.0.0.1/phpManual/function.getimagesize.html]: Marker: '0xD9' Reading 0x60 suggests that the seeker function skips some bytes. Reading the next four bytes after the seek: 0x60 0x60 0x76 0xFF that suggests 3 bytes are missing since after the seek the next char to read must be 0xFF. marcus