@@ -4277,63 +4277,72 @@ static bool exif_process_IFD_in_TIFF(image_info_type *ImageInfo, size_t dir_offs
42774277static 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