]> granicus.if.org Git - php/commitdiff
Allow ifd start at offset other than 00000007h and provide testcase.
authorMarcus Boerger <helly@php.net>
Sat, 19 Oct 2002 09:52:00 +0000 (09:52 +0000)
committerMarcus Boerger <helly@php.net>
Sat, 19 Oct 2002 09:52:00 +0000 (09:52 +0000)
#Now we can read images modified by Exifer.

ext/exif/exif.c
ext/exif/tests/005.phpt [new file with mode: 0644]
ext/exif/tests/test5.jpg [new file with mode: 0644]

index 8a8104d20e2aa0beb3bcf80e241378d490005e8c..810ed5dde8e894f003669f40f109f8daab8be20b 100644 (file)
@@ -3078,6 +3078,8 @@ static int exif_process_IFD_in_JPEG(image_info_type *ImageInfo, char *dir_start,
 */
 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 @@ static void exif_process_TIFF_in_JPEG(image_info_type *ImageInfo, char *CharBuf,
        }
 
        /* 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");
diff --git a/ext/exif/tests/005.phpt b/ext/exif/tests/005.phpt
new file mode 100644 (file)
index 0000000..d3c50c3
--- /dev/null
@@ -0,0 +1,19 @@
+--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"
+}
\ No newline at end of file
diff --git a/ext/exif/tests/test5.jpg b/ext/exif/tests/test5.jpg
new file mode 100644 (file)
index 0000000..d03cac1
Binary files /dev/null and b/ext/exif/tests/test5.jpg differ