Fixed bug #68547 (Exif Header component value check error) (Patch by sjh21a at gmail dot com)

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.
This commit is contained in:
Kalle Sommer Nielsen 2016-08-05 10:03:14 +02:00
parent d9e4d5116b
commit 1740823864
6 changed files with 19 additions and 5 deletions

2
NEWS
View file

@ -7,6 +7,8 @@ PHP NEWS
Samsung, DJI & Panasonic. (Kalle) Samsung, DJI & Panasonic. (Kalle)
. Fixed bug #72682 (exif_read_data() fails to read all data for some . Fixed bug #72682 (exif_read_data() fails to read all data for some
images). (Kalle) 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 . Fixed bug #66443 (Corrupt EXIF header: maximum directory nesting level
reached for some cameras). (Kalle) reached for some cameras). (Kalle)
. Fixed Redhat bug #1362571 (PHP not returning full results for . Fixed Redhat bug #1362571 (PHP not returning full results for

View file

@ -3058,7 +3058,7 @@ static int exif_process_IFD_TAG(image_info_type *ImageInfo, char *dir_entry, cha
/*return TRUE;*/ /*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); 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; return FALSE;
} }

BIN
ext/exif/tests/bug68547.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 713 B

View file

@ -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===

View file

@ -39,6 +39,7 @@ print_r(exif_read_data(__DIR__.'/bug68799.jpg'));
?> ?>
--EXPECTF-- --EXPECTF--
Warning: exif_read_data(bug68799.jpg): Process tag(x9C9D=Author ): Illegal components(0) in %s on line %d
Array Array
( (
[FileName] => bug68799.jpg [FileName] => bug68799.jpg
@ -46,7 +47,7 @@ Array
[FileSize] => 735 [FileSize] => 735
[FileType] => 2 [FileType] => 2
[MimeType] => image/jpeg [MimeType] => image/jpeg
[SectionsFound] => ANY_TAG, IFD0, WINXP [SectionsFound] => ANY_TAG, IFD0
[COMPUTED] => Array [COMPUTED] => Array
( (
[html] => width="1" height="1" [html] => width="1" height="1"
@ -59,5 +60,4 @@ Array
[XResolution] => 96/1 [XResolution] => 96/1
[YResolution] => 96/1 [YResolution] => 96/1
[ResolutionUnit] => 2 [ResolutionUnit] => 2
[Author] =>
) )

View 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): 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 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): 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 Warning: exif_read_data(bug72094_3.jpg): File structure corrupted in %s%ebug72094.php on line %d