summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2021-11-27 14:55:06 +0100
committerEven Rouault <even.rouault@spatialys.com>2021-11-30 22:17:51 +0100
commit6ffbd01d4c8fec0a7c08df4955fd2afa5f3b48c8 (patch)
tree89820d83810efd2cae390e562a6d5b9d00229d8b
parent80b003420d4e657379f7c96a71d421abb68a1087 (diff)
downloadlibtiff-git-6ffbd01d4c8fec0a7c08df4955fd2afa5f3b48c8.tar.gz
TIFFReadCustomDirectory(): avoid crash when reading SubjectDistance tag on a non EXIF directory
Fixes #316 The Valgrind trace was ``` TIFFReadCustomDirectory: Warning, Unknown field with tag 37382 (0x9206) encountered. ==3277355== Invalid read of size 1 ==3277355== at 0x4842B60: memmove (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==3277355== by 0x48BB799: _TIFFmemcpy (tif_unix.c:346) ==3277355== by 0x485B3CB: _TIFFVSetField (tif_dir.c:647) ==3277355== by 0x485C125: TIFFVSetField (tif_dir.c:890) ==3277355== by 0x485BEDC: TIFFSetField (tif_dir.c:834) ==3277355== by 0x486DA9A: TIFFFetchSubjectDistance (tif_dirread.c:5826) ==3277355== by 0x4869E35: TIFFReadCustomDirectory (tif_dirread.c:4530) ==3277355== by 0x4869F0A: TIFFReadGPSDirectory (tif_dirread.c:4564) ==3277355== by 0x10AA7A: main (tiffinfo.c:171) ==3277355== Address 0x3fc856aaaaaaaaab is not stack'd, malloc'd or (recently) free'd ==3277355== ```
-rw-r--r--libtiff/tif_dirread.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/libtiff/tif_dirread.c b/libtiff/tif_dirread.c
index d84147a0..8f434ef5 100644
--- a/libtiff/tif_dirread.c
+++ b/libtiff/tif_dirread.c
@@ -4527,7 +4527,14 @@ TIFFReadCustomDirectory(TIFF* tif, toff_t diroff,
switch (dp->tdir_tag)
{
case EXIFTAG_SUBJECTDISTANCE:
- (void)TIFFFetchSubjectDistance(tif, dp);
+ if( strncmp(fip->field_name, "Tag ", 4) != 0 ) {
+ /* should only be called on a Exif directory */
+ /* when exifFields[] is active */
+ (void)TIFFFetchSubjectDistance(tif, dp);
+ }
+ else {
+ (void)TIFFFetchNormalTag(tif, dp, TRUE);
+ }
break;
default:
(void)TIFFFetchNormalTag(tif, dp, TRUE);