@@ -4278,63 +4278,72 @@ static bool exif_process_IFD_in_TIFF(image_info_type *ImageInfo, size_t dir_offs
4278
4278
static bool exif_scan_FILE_header (image_info_type * ImageInfo )
4279
4279
{
4280
4280
unsigned char file_header [8 ];
4281
- bool ret = false;
4282
4281
4283
4282
ImageInfo -> FileType = IMAGE_FILETYPE_UNKNOWN ;
4284
4283
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 ) {
4288
4304
return false;
4289
4305
}
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;
4294
4320
} 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 ");
4299
4322
return false;
4300
4323
}
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 ;
4318
4327
#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" );
4320
4329
#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;
4329
4337
} 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 ");
4331
4339
return false;
4332
4340
}
4341
+ } else {
4342
+ exif_error_docref (NULL EXIFERR_CC , ImageInfo , E_WARNING , "File not supported ");
4343
+ return false;
4333
4344
}
4334
- } else {
4335
- exif_error_docref (NULL EXIFERR_CC , ImageInfo , E_WARNING , "File too small (%d)" , ImageInfo -> FileSize );
4336
4345
}
4337
- return ret ;
4346
+ return false ;
4338
4347
}
4339
4348
/* }}} */
4340
4349
0 commit comments