@@ -4278,63 +4278,72 @@ static bool exif_process_IFD_in_TIFF(image_info_type *ImageInfo, size_t dir_offs
42784278static bool exif_scan_FILE_header (image_info_type * ImageInfo )
42794279{
42804280 unsigned char file_header [8 ];
4281- bool ret = false;
42824281
42834282 ImageInfo -> FileType = IMAGE_FILETYPE_UNKNOWN ;
42844283
4285- if (ImageInfo -> FileSize >= 2 ) {
4286- php_stream_seek (ImageInfo -> infile , 0 , SEEK_SET );
4287- if (exif_read_from_stream_file_looped (ImageInfo -> infile , (char * )file_header , 2 ) != 2 ) {
4284+ if (UNEXPECTED (ImageInfo -> FileSize < 2 )) {
4285+ exif_error_docref (NULL EXIFERR_CC , ImageInfo , E_WARNING , "File too small (%d)" , ImageInfo -> FileSize );
4286+ return false;
4287+ }
4288+
4289+ php_stream_seek (ImageInfo -> infile , 0 , SEEK_SET );
4290+ if (exif_read_from_stream_file_looped (ImageInfo -> infile , (char * )file_header , 2 ) != 2 ) {
4291+ return false;
4292+ }
4293+
4294+ if ((file_header [0 ]== 0xff ) && (file_header [1 ]== M_SOI )) {
4295+ ImageInfo -> FileType = IMAGE_FILETYPE_JPEG ;
4296+ if (exif_scan_JPEG_header (ImageInfo )) {
4297+ return true;
4298+ } else {
4299+ exif_error_docref (NULL EXIFERR_CC , ImageInfo , E_WARNING , "Invalid JPEG file ");
4300+ return false;
4301+ }
4302+ } else if (ImageInfo -> FileSize >= 8 ) {
4303+ if (exif_read_from_stream_file_looped (ImageInfo -> infile , (char * )(file_header + 2 ), 6 ) != 6 ) {
42884304 return false;
42894305 }
4290- if ((file_header [0 ]== 0xff ) && (file_header [1 ]== M_SOI )) {
4291- ImageInfo -> FileType = IMAGE_FILETYPE_JPEG ;
4292- if (exif_scan_JPEG_header (ImageInfo )) {
4293- ret = true;
4306+
4307+ if (!memcmp (file_header , "II\x2A\x00" , 4 )) {
4308+ ImageInfo -> FileType = IMAGE_FILETYPE_TIFF_II ;
4309+ ImageInfo -> motorola_intel = 0 ;
4310+ #ifdef EXIF_DEBUG
4311+ exif_error_docref (NULL EXIFERR_CC , ImageInfo , E_NOTICE , "File has TIFF/II format" );
4312+ #endif
4313+ ImageInfo -> sections_found |= FOUND_IFD0 ;
4314+ if (exif_process_IFD_in_TIFF (
4315+ ImageInfo ,
4316+ php_ifd_get32u (file_header + 4 , ImageInfo -> motorola_intel ),
4317+ SECTION_IFD0
4318+ )) {
4319+ return true;
42944320 } else {
4295- exif_error_docref (NULL EXIFERR_CC , ImageInfo , E_WARNING , "Invalid JPEG file ");
4296- }
4297- } else if (ImageInfo -> FileSize >= 8 ) {
4298- if (exif_read_from_stream_file_looped (ImageInfo -> infile , (char * )(file_header + 2 ), 6 ) != 6 ) {
4321+ exif_error_docref (NULL EXIFERR_CC , ImageInfo , E_WARNING , "Invalid TIFF file ");
42994322 return false;
43004323 }
4301- if (!memcmp (file_header , "II\x2A\x00" , 4 )) {
4302- ImageInfo -> FileType = IMAGE_FILETYPE_TIFF_II ;
4303- ImageInfo -> motorola_intel = 0 ;
4304- #ifdef EXIF_DEBUG
4305- exif_error_docref (NULL EXIFERR_CC , ImageInfo , E_NOTICE , "File has TIFF/II format" );
4306- #endif
4307- ImageInfo -> sections_found |= FOUND_IFD0 ;
4308- if (exif_process_IFD_in_TIFF (ImageInfo ,
4309- php_ifd_get32u (file_header + 4 , ImageInfo -> motorola_intel ),
4310- SECTION_IFD0 )) {
4311- ret = true;
4312- } else {
4313- exif_error_docref (NULL EXIFERR_CC , ImageInfo , E_WARNING , "Invalid TIFF file ");
4314- }
4315- } else if (!memcmp (file_header , "MM\x00\x2a" , 4 )) {
4316- ImageInfo -> FileType = IMAGE_FILETYPE_TIFF_MM ;
4317- ImageInfo -> motorola_intel = 1 ;
4324+ } else if (!memcmp (file_header , "MM\x00\x2a" , 4 )) {
4325+ ImageInfo -> FileType = IMAGE_FILETYPE_TIFF_MM ;
4326+ ImageInfo -> motorola_intel = 1 ;
43184327#ifdef EXIF_DEBUG
4319- exif_error_docref (NULL EXIFERR_CC , ImageInfo , E_NOTICE , "File has TIFF/MM format" );
4328+ exif_error_docref (NULL EXIFERR_CC , ImageInfo , E_NOTICE , "File has TIFF/MM format" );
43204329#endif
4321- ImageInfo -> sections_found |= FOUND_IFD0 ;
4322- if (exif_process_IFD_in_TIFF (ImageInfo ,
4323- php_ifd_get32u (file_header + 4 , ImageInfo -> motorola_intel ),
4324- SECTION_IFD0 )) {
4325- ret = true;
4326- } else {
4327- exif_error_docref (NULL EXIFERR_CC , ImageInfo , E_WARNING , "Invalid TIFF file ");
4328- }
4330+ ImageInfo -> sections_found |= FOUND_IFD0 ;
4331+ if (exif_process_IFD_in_TIFF (
4332+ ImageInfo ,
4333+ php_ifd_get32u (file_header + 4 , ImageInfo -> motorola_intel ),
4334+ SECTION_IFD0
4335+ )) {
4336+ return true;
43294337 } else {
4330- exif_error_docref (NULL EXIFERR_CC , ImageInfo , E_WARNING , "File not supported ");
4338+ exif_error_docref (NULL EXIFERR_CC , ImageInfo , E_WARNING , "Invalid TIFF file ");
43314339 return false;
43324340 }
4341+ } else {
4342+ exif_error_docref (NULL EXIFERR_CC , ImageInfo , E_WARNING , "File not supported ");
4343+ return false;
43334344 }
4334- } else {
4335- exif_error_docref (NULL EXIFERR_CC , ImageInfo , E_WARNING , "File too small (%d)" , ImageInfo -> FileSize );
43364345 }
4337- return ret ;
4346+ return false ;
43384347}
43394348/* }}} */
43404349
0 commit comments