From 4eea4d5d934f4d59e676085274bbbc5439cfc80e Mon Sep 17 00:00:00 2001
From: Even Rouault <[EMAIL REDACTED]>
Date: Fri, 6 Jan 2023 00:33:09 +0100
Subject: [PATCH] Add _TIFFCleanupIFDOffsetAndNumberMaps() and call it from
TIFFUnlinkDirectory()
---
libtiff/tif_close.c | 21 +++++++++++++++++++--
libtiff/tif_dir.c | 2 ++
libtiff/tiffiop.h | 2 ++
3 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/libtiff/tif_close.c b/libtiff/tif_close.c
index 06aa29f5..985d290c 100644
--- a/libtiff/tif_close.c
+++ b/libtiff/tif_close.c
@@ -51,8 +51,7 @@ void TIFFCleanup(TIFF *tif)
(*tif->tif_cleanup)(tif);
TIFFFreeDirectory(tif);
- TIFFHashSetDestroy(tif->tif_map_dir_offset_to_number);
- TIFFHashSetDestroy(tif->tif_map_dir_number_to_offset);
+ _TIFFCleanupIFDOffsetAndNumberMaps(tif);
/*
* Clean up client info links.
@@ -114,6 +113,24 @@ void TIFFCleanup(TIFF *tif)
_TIFFfreeExt(NULL, tif);
}
+/************************************************************************/
+/* _TIFFCleanupIFDOffsetAndNumberMaps() */
+/************************************************************************/
+
+void _TIFFCleanupIFDOffsetAndNumberMaps(TIFF *tif)
+{
+ if (tif->tif_map_dir_offset_to_number)
+ {
+ TIFFHashSetDestroy(tif->tif_map_dir_offset_to_number);
+ tif->tif_map_dir_offset_to_number = NULL;
+ }
+ if (tif->tif_map_dir_number_to_offset)
+ {
+ TIFFHashSetDestroy(tif->tif_map_dir_number_to_offset);
+ tif->tif_map_dir_number_to_offset = NULL;
+ }
+}
+
/************************************************************************/
/* TIFFClose() */
/************************************************************************/
diff --git a/libtiff/tif_dir.c b/libtiff/tif_dir.c
index c7789bb8..804ed6f9 100644
--- a/libtiff/tif_dir.c
+++ b/libtiff/tif_dir.c
@@ -2231,5 +2231,7 @@ int TIFFUnlinkDirectory(TIFF *tif, tdir_t dirn)
tif->tif_curoff = 0;
tif->tif_row = (uint32_t)-1;
tif->tif_curstrip = (uint32_t)-1;
+ tif->tif_curdir = TIFF_NON_EXISTENT_DIR_NUMBER;
+ _TIFFCleanupIFDOffsetAndNumberMaps(tif);
return (1);
}
diff --git a/libtiff/tiffiop.h b/libtiff/tiffiop.h
index 791881a3..bf8afb2a 100644
--- a/libtiff/tiffiop.h
+++ b/libtiff/tiffiop.h
@@ -444,6 +444,8 @@ extern "C"
extern float _TIFFClampDoubleToFloat(double);
extern uint32_t _TIFFClampDoubleToUInt32(double);
+ extern void _TIFFCleanupIFDOffsetAndNumberMaps(TIFF *tif);
+
extern tmsize_t _TIFFReadEncodedStripAndAllocBuffer(TIFF *tif,
uint32_t strip,
void **buf,