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

Reply via email to