Update exif.cpp
authorguoxuedong <guoxdme@gmail.com>
Thu, 24 Nov 2016 03:08:11 +0000 (11:08 +0800)
committerGitHub <noreply@github.com>
Thu, 24 Nov 2016 03:08:11 +0000 (11:08 +0800)
 ExifReader::getExif may enter infinite loop with jpeg image which have no EOI.
For example, bytesToSkip may be set to 0 and fseek seems like fseek(f, -2 , SEEK_CUR) for image that end with RST7(FF D7) instead of EOI.

modules/imgcodecs/src/exif.cpp

index 2708481..8a4f3f4 100644 (file)
@@ -160,6 +160,10 @@ std::map<int, ExifEntry_t > ExifReader::getExif()
             case APP9: case APP10: case APP11: case APP12: case APP13: case APP14: case APP15:
             case COM:
                 bytesToSkip = getFieldSize( f );
+                if (bytesToSkip < markerSize) {
+                    fclose(f);
+                    throw ExifParsingError();
+                }
                 fseek( f, static_cast<long>( bytesToSkip - markerSize ), SEEK_CUR );
                 break;