mirror of
https://github.com/php/php-src.git
synced 2025-08-15 13:38:49 +02:00
Fix bug #76557: heap-buffer-overflow (READ of size 48) while reading exif data
Use MAKERNOTE length as data size.
This commit is contained in:
parent
1baeae4270
commit
3462efa386
3 changed files with 83 additions and 1 deletions
|
@ -2728,6 +2728,7 @@ static int exif_process_IFD_in_MAKERNOTE(image_info_type *ImageInfo, char * valu
|
||||||
int NumDirEntries, old_motorola_intel, offset_diff;
|
int NumDirEntries, old_motorola_intel, offset_diff;
|
||||||
const maker_note_type *maker_note;
|
const maker_note_type *maker_note;
|
||||||
char *dir_start;
|
char *dir_start;
|
||||||
|
int data_len;
|
||||||
|
|
||||||
for (i=0; i<=sizeof(maker_note_array)/sizeof(maker_note_type); i++) {
|
for (i=0; i<=sizeof(maker_note_array)/sizeof(maker_note_type); i++) {
|
||||||
if (i==sizeof(maker_note_array)/sizeof(maker_note_type)) {
|
if (i==sizeof(maker_note_array)/sizeof(maker_note_type)) {
|
||||||
|
@ -2782,6 +2783,7 @@ static int exif_process_IFD_in_MAKERNOTE(image_info_type *ImageInfo, char * valu
|
||||||
switch (maker_note->offset_mode) {
|
switch (maker_note->offset_mode) {
|
||||||
case MN_OFFSET_MAKER:
|
case MN_OFFSET_MAKER:
|
||||||
offset_base = value_ptr;
|
offset_base = value_ptr;
|
||||||
|
data_len = value_len;
|
||||||
break;
|
break;
|
||||||
case MN_OFFSET_GUESS:
|
case MN_OFFSET_GUESS:
|
||||||
if (maker_note->offset + 10 + 4 >= value_len) {
|
if (maker_note->offset + 10 + 4 >= value_len) {
|
||||||
|
@ -2798,6 +2800,7 @@ static int exif_process_IFD_in_MAKERNOTE(image_info_type *ImageInfo, char * valu
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
offset_base = value_ptr + offset_diff;
|
offset_base = value_ptr + offset_diff;
|
||||||
|
data_len = value_len - offset_diff;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
case MN_OFFSET_NORMAL:
|
case MN_OFFSET_NORMAL:
|
||||||
|
@ -2811,7 +2814,7 @@ static int exif_process_IFD_in_MAKERNOTE(image_info_type *ImageInfo, char * valu
|
||||||
|
|
||||||
for (de=0;de<NumDirEntries;de++) {
|
for (de=0;de<NumDirEntries;de++) {
|
||||||
if (!exif_process_IFD_TAG(ImageInfo, dir_start + 2 + 12 * de,
|
if (!exif_process_IFD_TAG(ImageInfo, dir_start + 2 + 12 * de,
|
||||||
offset_base, IFDlength, displacement, section_index, 0, maker_note->tag_table TSRMLS_CC)) {
|
offset_base, data_len, displacement, section_index, 0, maker_note->tag_table TSRMLS_CC)) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
BIN
ext/exif/tests/bug76557.jpg
Normal file
BIN
ext/exif/tests/bug76557.jpg
Normal file
Binary file not shown.
79
ext/exif/tests/bug76557.phpt
Normal file
79
ext/exif/tests/bug76557.phpt
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
--TEST--
|
||||||
|
Bug 76557 (heap-buffer-overflow (READ of size 48) while reading exif data)
|
||||||
|
--SKIPIF--
|
||||||
|
<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
var_dump(count(exif_read_data(dirname(__FILE__) . "/bug76557.jpg")));
|
||||||
|
?>
|
||||||
|
DONE
|
||||||
|
--EXPECTF--
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x010F=Make ): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x8769=Exif_IFD_Po): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x927C=MakerNote ): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal format code 0x3030, suppose BYTE in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Process tag(x3030=UndefinedTa): Illegal pointer offset(x30303030 + x30303030 = x60606060 > x00EE) in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): File structure corrupted in %sbug76557.php on line %d
|
||||||
|
|
||||||
|
Warning: exif_read_data(bug76557.jpg): Invalid JPEG file in %sbug76557.php on line %d
|
||||||
|
int(1)
|
||||||
|
DONE
|
Loading…
Add table
Add a link
Reference in a new issue