helly           Sat Oct 19 05:52:00 2002 EDT

  Added files:                 
    /php4/ext/exif/tests        005.phpt test5.jpg 

  Modified files:              
    /php4/ext/exif      exif.c 
  Log:
  Allow ifd start at offset other than 00000007h and provide testcase.
  #Now we can read images modified by Exifer.
  
  
Index: php4/ext/exif/exif.c
diff -u php4/ext/exif/exif.c:1.116 php4/ext/exif/exif.c:1.117
--- php4/ext/exif/exif.c:1.116  Thu Oct  3 06:44:13 2002
+++ php4/ext/exif/exif.c        Sat Oct 19 05:52:00 2002
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: exif.c,v 1.116 2002/10/03 10:44:13 helly Exp $ */
+/* $Id: exif.c,v 1.117 2002/10/19 09:52:00 helly Exp $ */
 
 /*  ToDos
  *
@@ -109,7 +109,7 @@
 };
 /* }}} */
 
-#define EXIF_VERSION "1.4 $Id: exif.c,v 1.116 2002/10/03 10:44:13 helly Exp $"
+#define EXIF_VERSION "1.4 $Id: exif.c,v 1.117 2002/10/19 09:52:00 helly Exp $"
 
 /* {{{ PHP_MINFO_FUNCTION
  */
@@ -3078,6 +3078,8 @@
 */
 static void exif_process_TIFF_in_JPEG(image_info_type *ImageInfo, char *CharBuf, 
size_t length, size_t displacement TSRMLS_DC)
 {
+       unsigned exif_value_2a, offset_of_ifd;
+
        /* set the thumbnail stuff to nothing so we can test to see if they get set up 
*/
        if (memcmp(CharBuf, "II", 2) == 0) {
                ImageInfo->motorola_intel = 0;
@@ -3089,16 +3091,16 @@
        }
 
        /* Check the next two values for correctness. */
-       if (php_ifd_get16u(CharBuf+2, ImageInfo->motorola_intel) != 0x2a
-         || php_ifd_get32u(CharBuf+4, ImageInfo->motorola_intel) != 0x08
-       ) {
+       exif_value_2a = php_ifd_get16u(CharBuf+2, ImageInfo->motorola_intel);
+       offset_of_ifd = php_ifd_get32u(CharBuf+4, ImageInfo->motorola_intel);
+       if ( exif_value_2a != 0x2a || offset_of_ifd < 0x08) {
                exif_error_docref(NULL TSRMLS_CC, ImageInfo, E_WARNING, "invalid TIFF 
start (1)");
                return;
        }
 
        ImageInfo->sections_found |= FOUND_IFD0;
        /* First directory starts at offset 8. Offsets starts at 0. */
-       exif_process_IFD_in_JPEG(ImageInfo, CharBuf+8, CharBuf, length/*-14*/, 
displacement, SECTION_IFD0 TSRMLS_CC);
+       exif_process_IFD_in_JPEG(ImageInfo, CharBuf+offset_of_ifd, CharBuf, 
+length/*-14*/, displacement, SECTION_IFD0 TSRMLS_CC);
 
 #ifdef EXIF_DEBUG
        exif_error_docref(NULL TSRMLS_CC, ImageInfo, E_NOTICE, "process TIFF in JPEG 
done");

Index: php4/ext/exif/tests/005.phpt
+++ php4/ext/exif/tests/005.phpt
--TEST--
Check for exif_read_data, unusual IFD start
--SKIPIF--
<?php if (!extension_loaded("exif")) print "skip";?>
--FILE--
<?php
/*
  test5.jpg is a 1*1 image that contain an Exif section with ifd start at 00000009h
*/
$image  = exif_read_data('./ext/exif/tests/test5.jpg','',true,false);
var_dump($image['IFD0']);
?>
--EXPECT--
array(2) {
  ["ImageDescription"]=>
  string(11) "Ifd00000009"
  ["DateTime"]=>
  string(19) "2002:10:18 20:06:00"
}


-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to