Skip to content

Commit 696dd5c

Browse files
committed
ext/exif: Refactor implementation of exif_scan_FILE_header()
1 parent 7c5f458 commit 696dd5c

File tree

1 file changed

+51
-42
lines changed

1 file changed

+51
-42
lines changed

ext/exif/exif.c

Lines changed: 51 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -4277,63 +4277,72 @@ static bool exif_process_IFD_in_TIFF(image_info_type *ImageInfo, size_t dir_offs
42774277
static bool exif_scan_FILE_header(image_info_type *ImageInfo)
42784278
{
42794279
unsigned char file_header[8];
4280-
bool ret = false;
42814280

42824281
ImageInfo->FileType = IMAGE_FILETYPE_UNKNOWN;
42834282

4284-
if (ImageInfo->FileSize >= 2) {
4285-
php_stream_seek(ImageInfo->infile, 0, SEEK_SET);
4286-
if (exif_read_from_stream_file_looped(ImageInfo->infile, (char*)file_header, 2) != 2) {
4283+
if (UNEXPECTED(ImageInfo->FileSize < 2)) {
4284+
exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "File too small (%d)", ImageInfo->FileSize);
4285+
return false;
4286+
}
4287+
4288+
php_stream_seek(ImageInfo->infile, 0, SEEK_SET);
4289+
if (exif_read_from_stream_file_looped(ImageInfo->infile, (char*)file_header, 2) != 2) {
4290+
return false;
4291+
}
4292+
4293+
if ((file_header[0]==0xff) && (file_header[1]==M_SOI)) {
4294+
ImageInfo->FileType = IMAGE_FILETYPE_JPEG;
4295+
if (exif_scan_JPEG_header(ImageInfo)) {
4296+
return true;
4297+
} else {
4298+
exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Invalid JPEG file");
4299+
return false;
4300+
}
4301+
} else if (ImageInfo->FileSize >= 8) {
4302+
if (exif_read_from_stream_file_looped(ImageInfo->infile, (char*)(file_header+2), 6) != 6) {
42874303
return false;
42884304
}
4289-
if ((file_header[0]==0xff) && (file_header[1]==M_SOI)) {
4290-
ImageInfo->FileType = IMAGE_FILETYPE_JPEG;
4291-
if (exif_scan_JPEG_header(ImageInfo)) {
4292-
ret = true;
4305+
4306+
if (!memcmp(file_header, "II\x2A\x00", 4)) {
4307+
ImageInfo->FileType = IMAGE_FILETYPE_TIFF_II;
4308+
ImageInfo->motorola_intel = 0;
4309+
#ifdef EXIF_DEBUG
4310+
exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "File has TIFF/II format");
4311+
#endif
4312+
ImageInfo->sections_found |= FOUND_IFD0;
4313+
if (exif_process_IFD_in_TIFF(
4314+
ImageInfo,
4315+
php_ifd_get32u(file_header + 4, ImageInfo->motorola_intel),
4316+
SECTION_IFD0
4317+
)) {
4318+
return true;
42934319
} else {
4294-
exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Invalid JPEG file");
4295-
}
4296-
} else if (ImageInfo->FileSize >= 8) {
4297-
if (exif_read_from_stream_file_looped(ImageInfo->infile, (char*)(file_header+2), 6) != 6) {
4320+
exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Invalid TIFF file");
42984321
return false;
42994322
}
4300-
if (!memcmp(file_header, "II\x2A\x00", 4)) {
4301-
ImageInfo->FileType = IMAGE_FILETYPE_TIFF_II;
4302-
ImageInfo->motorola_intel = 0;
4303-
#ifdef EXIF_DEBUG
4304-
exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "File has TIFF/II format");
4305-
#endif
4306-
ImageInfo->sections_found |= FOUND_IFD0;
4307-
if (exif_process_IFD_in_TIFF(ImageInfo,
4308-
php_ifd_get32u(file_header + 4, ImageInfo->motorola_intel),
4309-
SECTION_IFD0)) {
4310-
ret = true;
4311-
} else {
4312-
exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Invalid TIFF file");
4313-
}
4314-
} else if (!memcmp(file_header, "MM\x00\x2a", 4)) {
4315-
ImageInfo->FileType = IMAGE_FILETYPE_TIFF_MM;
4316-
ImageInfo->motorola_intel = 1;
4323+
} else if (!memcmp(file_header, "MM\x00\x2a", 4)) {
4324+
ImageInfo->FileType = IMAGE_FILETYPE_TIFF_MM;
4325+
ImageInfo->motorola_intel = 1;
43174326
#ifdef EXIF_DEBUG
4318-
exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "File has TIFF/MM format");
4327+
exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "File has TIFF/MM format");
43194328
#endif
4320-
ImageInfo->sections_found |= FOUND_IFD0;
4321-
if (exif_process_IFD_in_TIFF(ImageInfo,
4322-
php_ifd_get32u(file_header + 4, ImageInfo->motorola_intel),
4323-
SECTION_IFD0)) {
4324-
ret = true;
4325-
} else {
4326-
exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Invalid TIFF file");
4327-
}
4329+
ImageInfo->sections_found |= FOUND_IFD0;
4330+
if (exif_process_IFD_in_TIFF(
4331+
ImageInfo,
4332+
php_ifd_get32u(file_header + 4, ImageInfo->motorola_intel),
4333+
SECTION_IFD0
4334+
)) {
4335+
return true;
43284336
} else {
4329-
exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "File not supported");
4337+
exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Invalid TIFF file");
43304338
return false;
43314339
}
4340+
} else {
4341+
exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "File not supported");
4342+
return false;
43324343
}
4333-
} else {
4334-
exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "File too small (%d)", ImageInfo->FileSize);
43354344
}
4336-
return ret;
4345+
return false;
43374346
}
43384347
/* }}} */
43394348

0 commit comments

Comments
 (0)