]> granicus.if.org Git - php/commitdiff
Fixed bug #68547 (Exif Header component value check error) (Patch by sjh21a at gmail...
authorKalle Sommer Nielsen <kalle@php.net>
Fri, 5 Aug 2016 08:03:14 +0000 (10:03 +0200)
committerKalle Sommer Nielsen <kalle@php.net>
Fri, 5 Aug 2016 08:03:14 +0000 (10:03 +0200)
This patch changes processing a little and causes some crafted tags to not be parsed and generate a warning.

This is a slight BC break from earlier versions, since it will no longer return the tags of that it was mismatching (see bug68799.phpt), namely the "WINXP" section and the "Author" tag is no longer returned due to this. Although this BC break is merely only for crafted tags, this can also have some real life effects on pictures re-saved from editors that can cause bad exif data writes, so lets keep it here.

NEWS
ext/exif/exif.c
ext/exif/tests/bug68547.jpg [new file with mode: 0644]
ext/exif/tests/bug68547.phpt [new file with mode: 0644]
ext/exif/tests/bug68799.phpt
ext/exif/tests/bug72094.phpt

diff --git a/NEWS b/NEWS
index baa991b9625d488d549d85b5c9728ae1ea53df6b..929eb33fc64ac0c8cfbb6bf91df0a8dadec6b97f 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -7,6 +7,8 @@ PHP                                                                        NEWS
     Samsung, DJI & Panasonic. (Kalle)
   . Fixed bug #72682 (exif_read_data() fails to read all data for some 
     images). (Kalle)
+  . Fixed bug #68547 (Exif Header component value check error). 
+    (sjh21a at gmail dot com, Kalle)
   . Fixed bug #66443 (Corrupt EXIF header: maximum directory nesting level 
     reached for some cameras). (Kalle)
   . Fixed Redhat bug #1362571 (PHP not returning full results for 
index 75ff992cf73a0632c16d60c9338fd3f71cbeb879..2618d749a3f3fc92884df2c424553c3bb800d2ad 100644 (file)
@@ -3058,7 +3058,7 @@ static int exif_process_IFD_TAG(image_info_type *ImageInfo, char *dir_entry, cha
                /*return TRUE;*/
        }
 
-       if (components < 0) {
+       if (components <= 0) {
                exif_error_docref("exif_read_data#error_ifd" EXIFERR_CC, ImageInfo, E_WARNING, "Process tag(x%04X=%s): Illegal components(%ld)", tag, exif_get_tagname(tag, tagname, -12, tag_table), components);
                return FALSE;
        }
diff --git a/ext/exif/tests/bug68547.jpg b/ext/exif/tests/bug68547.jpg
new file mode 100644 (file)
index 0000000..2a328b7
Binary files /dev/null and b/ext/exif/tests/bug68547.jpg differ
diff --git a/ext/exif/tests/bug68547.phpt b/ext/exif/tests/bug68547.phpt
new file mode 100644 (file)
index 0000000..3773ebb
--- /dev/null
@@ -0,0 +1,12 @@
+--TEST--
+Bug #68547 (Exif Header component value check error)
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--FILE--
+<?php
+exif_read_data(__DIR__ . DIRECTORY_SEPARATOR . 'bug68547.jpg');
+?>
+===DONE===
+--EXPECTF--
+Warning: exif_read_data(bug68547.jpg): Process tag(x9C9E=Keywords   ): Illegal components(0) in %sbug68547.php on line %d
+===DONE===
\ No newline at end of file
index f50a41b4020f1f7d2ae1e8a9f09c8a3684683e30..1f10fcf69e945f2b40892dcb78e3625098a1269f 100644 (file)
@@ -39,6 +39,7 @@ print_r(exif_read_data(__DIR__.'/bug68799.jpg'));
 
 ?>
 --EXPECTF--
+Warning: exif_read_data(bug68799.jpg): Process tag(x9C9D=Author     ): Illegal components(0) in %s on line %d
 Array
 (
     [FileName] => bug68799.jpg
@@ -46,7 +47,7 @@ Array
     [FileSize] => 735
     [FileType] => 2
     [MimeType] => image/jpeg
-    [SectionsFound] => ANY_TAG, IFD0, WINXP
+    [SectionsFound] => ANY_TAG, IFD0
     [COMPUTED] => Array
         (
             [html] => width="1" height="1"
@@ -59,5 +60,4 @@ Array
     [XResolution] => 96/1
     [YResolution] => 96/1
     [ResolutionUnit] => 2
-    [Author] => 
 )
index 611faf9152db2354b60d03e883fd9818039ab164..ba7d291ffca53f4b59a7d2de2969330dc91e49db 100644 (file)
@@ -23,7 +23,7 @@ Warning: exif_read_data(bug72094_1.jpg): Process tag(x3030=UndefinedTa): Illegal
 
 Warning: exif_read_data(bug72094_1.jpg): Process tag(x8298=Copyright  ): Illegal format code 0x3030, suppose BYTE in %s%ebug72094.php on line %d
 
-Warning: exif_read_data(bug72094_1.jpg): Illegal IFD offset in %s%ebug72094.php on line %d
+Warning: exif_read_data(bug72094_1.jpg): Illegal IFD offset in %sbug72094.php on line %d
 
 Warning: exif_read_data(bug72094_1.jpg): File structure corrupted in %s%ebug72094.php on line %d
 
@@ -47,7 +47,7 @@ Warning: exif_read_data(bug72094_3.jpg): Process tag(x3030=UndefinedTa): Illegal
 
 Warning: exif_read_data(bug72094_3.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %s%ebug72094.php on line %d
 
-Warning: exif_read_data(bug72094_3.jpg): Illegal IFD size in %s%ebug72094.php on line %d
+Warning: exif_read_data(bug72094_3.jpg): Process tag(x3030=UndefinedTa): Illegal components(0) in %s%ebug72094.php on line %d
 
 Warning: exif_read_data(bug72094_3.jpg): File structure corrupted in %s%ebug72094.php on line %d