Skip to content

Commit

Permalink
Fix #71848: getimagesize with $imageinfo returns false
Browse files Browse the repository at this point in the history
Some JFIF images contain empty APP segments, i.e. those which consist
only of the marker bytes and the length, but without actual content.
It appears to be doubtful to have empty APP segments, but we should
apply the robustness principle, and accept these, instead of simply
failing in this case.

We choose to add empty APP segments to $imageinfo with an empty string
as value, instead of NULL, or even to omit these segments altogether.

This patch also fixes the potential issue that php_stream_read() might
not read the supposed number of bytes, which could result in garbage to
be added to the read value.
  • Loading branch information
cmb69 committed Jun 30, 2018
1 parent 962706d commit ae04110
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 1 deletion.
1 change: 1 addition & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ PHP NEWS
- Standard:
. Fixed bug #76505 (array_merge_recursive() is duplicating sub-array keys).
(Laruence)
. Fixed bug #71848 (getimagesize with $imageinfo returns false). (cmb)

22 Jun 2019, PHP 7.1.19

Expand Down
2 changes: 1 addition & 1 deletion ext/standard/image.c
Original file line number Diff line number Diff line change
Expand Up @@ -453,7 +453,7 @@ static int php_read_APP(php_stream * stream, unsigned int marker, zval *info)

buffer = emalloc(length);

if (php_stream_read(stream, buffer, (zend_long) length) <= 0) {
if (php_stream_read(stream, buffer, (zend_long) length) != length) {
efree(buffer);
return 0;
}
Expand Down
Binary file added ext/standard/tests/image/bug71848.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
32 changes: 32 additions & 0 deletions ext/standard/tests/image/bug71848.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
--TEST--
Bug #71848 (getimagesize with $imageinfo returns false)
--FILE--
<?php
var_dump(getimagesize(__DIR__ . '/bug71848.jpg', $info));
var_dump(array_keys($info));
?>
===DONE===
--EXPECT--
array(7) {
[0]=>
int(8)
[1]=>
int(8)
[2]=>
int(2)
[3]=>
string(20) "width="8" height="8""
["bits"]=>
int(8)
["channels"]=>
int(3)
["mime"]=>
string(10) "image/jpeg"
}
array(2) {
[0]=>
string(4) "APP0"
[1]=>
string(4) "APP5"
}
===DONE===

0 comments on commit ae04110

Please sign in to comment.