|
|
6456d8 |
Make TIFFPrintDirectory cope with both TIFF_VARIABLE and TIFF_VARIABLE2
|
|
|
6456d8 |
conventions for field_passcount fields, ie, either 16- or 32-bit counts.
|
|
|
6456d8 |
This patch is taken from upstream commits dated 2012-05-23 ("fix crash
|
|
|
6456d8 |
with odd 16bit count types for some custom fields") and 2012-12-12 ("Fix
|
|
|
6456d8 |
TIFF_VARIABLE/TIFF_VARIABLE2 confusion in TIFFPrintDirectory").
|
|
|
6456d8 |
|
|
|
6456d8 |
This doesn't qualify as a security issue in itself, mainly because
|
|
|
6456d8 |
TIFFPrintDirectory is unlikely to be used in any security-exposed
|
|
|
6456d8 |
scenarios; but we need to fix it so that our test case for CVE-2012-5581
|
|
|
6456d8 |
works on all platforms.
|
|
|
6456d8 |
|
|
|
6456d8 |
|
|
|
6456d8 |
diff -Naur tiff-3.9.4.orig/libtiff/tif_print.c tiff-3.9.4/libtiff/tif_print.c
|
|
|
6456d8 |
--- tiff-3.9.4.orig/libtiff/tif_print.c 2010-06-08 14:50:42.000000000 -0400
|
|
|
6456d8 |
+++ tiff-3.9.4/libtiff/tif_print.c 2012-12-13 12:17:33.726765771 -0500
|
|
|
6456d8 |
@@ -518,8 +518,19 @@
|
|
|
6456d8 |
continue;
|
|
|
6456d8 |
|
|
|
6456d8 |
if(fip->field_passcount) {
|
|
|
6456d8 |
- if(TIFFGetField(tif, tag, &value_count, &raw_data) != 1)
|
|
|
6456d8 |
+ if (fip->field_readcount == TIFF_VARIABLE2 ) {
|
|
|
6456d8 |
+ if(TIFFGetField(tif, tag, &value_count, &raw_data) != 1)
|
|
|
6456d8 |
+ continue;
|
|
|
6456d8 |
+ } else if (fip->field_readcount == TIFF_VARIABLE ) {
|
|
|
6456d8 |
+ uint16 small_value_count;
|
|
|
6456d8 |
+ if(TIFFGetField(tif, tag, &small_value_count, &raw_data) != 1)
|
|
|
6456d8 |
+ continue;
|
|
|
6456d8 |
+ value_count = small_value_count;
|
|
|
6456d8 |
+ } else {
|
|
|
6456d8 |
+ assert (fip->field_readcount == TIFF_VARIABLE
|
|
|
6456d8 |
+ || fip->field_readcount == TIFF_VARIABLE2);
|
|
|
6456d8 |
continue;
|
|
|
6456d8 |
+ }
|
|
|
6456d8 |
} else {
|
|
|
6456d8 |
if (fip->field_readcount == TIFF_VARIABLE
|
|
|
6456d8 |
|| fip->field_readcount == TIFF_VARIABLE2)
|