@@ -374,7 +374,7 @@ static const TIFFField exifFields[] = {
374
374
{EXIFTAG_BRIGHTNESSVALUE , 1 , 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , "BrightnessValue" , NULL },
375
375
{EXIFTAG_EXPOSUREBIASVALUE , 1 , 1 , TIFF_SRATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , "ExposureBiasValue" , NULL },
376
376
{EXIFTAG_MAXAPERTUREVALUE , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , "MaxApertureValue" , NULL },
377
- /*--: EXIFTAG_SUBJECTDISTANCE: LibTiff returns value of "-1" if numerator equals 4294967295 (0xFFFFFFFF) to indicate infinite distance!
377
+ /*--: EXIFTAG_SUBJECTDISTANCE: LibTiff returns value of "-1" if numerator equals 4294967295 (0xFFFFFFFF) to indicate infinite distance!
378
378
* However, there are two other EXIF tags where numerator indicates a special value and six other cases where the denominator indicates special values,
379
379
* which are not treated within LibTiff!! */
380
380
{EXIFTAG_SUBJECTDISTANCE , 1 , 1 , TIFF_RATIONAL , 0 , TIFF_SETGET_FLOAT , TIFF_SETGET_UNDEFINED , FIELD_CUSTOM , 1 , 0 , "SubjectDistance" , NULL },
@@ -1197,12 +1197,24 @@ int TIFFMergeFieldInfo(TIFF *tif, const TIFFFieldInfo info[], uint32_t n)
1197
1197
for (i = 0 ; i < n ; i ++ )
1198
1198
{
1199
1199
tp -> field_tag = info [i ].field_tag ;
1200
+ if (info [i ].field_readcount < TIFF_VARIABLE2 ||
1201
+ info [i ].field_readcount == 0 ||
1202
+ info [i ].field_writecount < TIFF_VARIABLE2 ||
1203
+ info [i ].field_writecount == 0 )
1204
+ {
1205
+ /* The fields (field_readcount) and (field_writecount) may use the
1206
+ * values TIFF_VARIABLE (-1), TIFF_SPP (-2), TIFF_VARIABLE2 (-3). */
1207
+ TIFFErrorExtR (tif , module ,
1208
+ "The value of field_readcount and field_writecount "
1209
+ "must be greater than or equal to -3 and not zero." );
1210
+ return -1 ;
1211
+ }
1200
1212
tp -> field_readcount = info [i ].field_readcount ;
1201
1213
tp -> field_writecount = info [i ].field_writecount ;
1202
1214
tp -> field_type = info [i ].field_type ;
1203
1215
tp -> field_anonymous = 0 ;
1204
1216
tp -> set_field_type =
1205
- _TIFFSetGetType (info [i ].field_type , info [i ].field_readcount ,
1217
+ _TIFFSetGetType (info [i ].field_type , info [i ].field_writecount ,
1206
1218
info [i ].field_passcount );
1207
1219
tp -> get_field_type =
1208
1220
_TIFFSetGetType (info [i ].field_type , info [i ].field_readcount ,
0 commit comments