From b1ddac5c112f7dbd198e426b179387e3857125d0 Mon Sep 17 00:00:00 2001
From: Su_Laus <[EMAIL REDACTED]>
Date: Wed, 8 Feb 2023 21:36:18 +0100
Subject: [PATCH] Fix 484 TIFFDirectory td_fieldsset uses unsigned long which
can be 32 or 64 bits.
Closes #484
(cherry picked from commit aa2cd98b3ef5a3de745b10d810ec7e6e94868efd)
---
libtiff/tif_dir.c | 2 +-
libtiff/tif_dir.h | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/libtiff/tif_dir.c b/libtiff/tif_dir.c
index 38ddedee..af743236 100644
--- a/libtiff/tif_dir.c
+++ b/libtiff/tif_dir.c
@@ -1329,7 +1329,7 @@ TIFFFreeDirectory(TIFF* tif)
TIFFDirectory *td = &tif->tif_dir;
int i;
- _TIFFmemset(td->td_fieldsset, 0, FIELD_SETLONGS);
+ _TIFFmemset(td->td_fieldsset, 0, sizeof(td->td_fieldsset));
CleanupField(td_sminsamplevalue);
CleanupField(td_smaxsamplevalue);
CleanupField(td_colormap[0]);
diff --git a/libtiff/tif_dir.h b/libtiff/tif_dir.h
index 00afd37f..a7f7f537 100644
--- a/libtiff/tif_dir.h
+++ b/libtiff/tif_dir.h
@@ -65,9 +65,9 @@ typedef struct {
* Internal format of a TIFF directory entry.
*/
typedef struct {
-#define FIELD_SETLONGS 4
+#define FIELDSET_ITEMS 4
/* bit vector of fields that are set */
- unsigned long td_fieldsset[FIELD_SETLONGS];
+ uint32 td_fieldsset[FIELDSET_ITEMS];
uint32 td_imagewidth, td_imagelength, td_imagedepth;
uint32 td_tilewidth, td_tilelength, td_tiledepth;
@@ -191,9 +191,9 @@ typedef struct {
*/
#define FIELD_PSEUDO 0
-#define FIELD_LAST (32*FIELD_SETLONGS-1)
+#define FIELD_LAST (32*FIELDSET_ITEMS-1)
-#define BITn(n) (((unsigned long)1L)<<((n)&0x1f))
+#define BITn(n) (((uint32)1L)<<((n)&0x1f))
#define BITFIELDn(tif, n) ((tif)->tif_dir.td_fieldsset[(n)/32])
#define TIFFFieldSet(tif, field) (BITFIELDn(tif, field) & BITn(field))
#define TIFFSetFieldBit(tif, field) (BITFIELDn(tif, field) |= BITn(field))