195 lines
5.8 KiB
Diff
195 lines
5.8 KiB
Diff
--- tiff-3.7.2/libtiff/tif_dirread.c.persample 2005-03-05 04:06:00.000000000 -0500
|
|
+++ tiff-3.7.2/libtiff/tif_dirread.c 2005-06-29 11:54:31.536319000 -0400
|
|
@@ -1303,33 +1303,37 @@
|
|
static int
|
|
TIFFFetchPerSampleShorts(TIFF* tif, TIFFDirEntry* dir, uint16* pl)
|
|
{
|
|
- uint16 samples = tif->tif_dir.td_samplesperpixel;
|
|
- int status = 0;
|
|
+ uint16 samples = tif->tif_dir.td_samplesperpixel;
|
|
+ int status = 0;
|
|
|
|
- if (CheckDirCount(tif, dir, (uint32) samples)) {
|
|
- uint16 buf[10];
|
|
- uint16* v = buf;
|
|
-
|
|
- if (samples > NITEMS(buf))
|
|
- v = (uint16*) CheckMalloc(tif, samples, sizeof(uint16),
|
|
- "to fetch per-sample values");
|
|
- if (v && TIFFFetchShortArray(tif, dir, v)) {
|
|
- uint16 i;
|
|
- for (i = 1; i < samples; i++)
|
|
- if (v[i] != v[0]) {
|
|
- TIFFError(tif->tif_name,
|
|
- "Cannot handle different per-sample values for field \"%s\"",
|
|
- _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name);
|
|
- goto bad;
|
|
- }
|
|
- *pl = v[0];
|
|
- status = 1;
|
|
- }
|
|
- bad:
|
|
- if (v && v != buf)
|
|
- _TIFFfree(v);
|
|
- }
|
|
- return (status);
|
|
+ if (CheckDirCount(tif, dir, (uint32) samples)) {
|
|
+ uint16 buf[10];
|
|
+ uint16* v = buf;
|
|
+
|
|
+ if (dir->tdir_count > NITEMS(buf))
|
|
+ v = (uint16*) CheckMalloc(tif, dir->tdir_count, sizeof(uint16),
|
|
+ "to fetch per-sample values");
|
|
+ if (v && TIFFFetchShortArray(tif, dir, v)) {
|
|
+ uint16 i;
|
|
+ int check_count = dir->tdir_count;
|
|
+ if( samples < check_count )
|
|
+ check_count = samples;
|
|
+
|
|
+ for (i = 1; i < check_count; i++)
|
|
+ if (v[i] != v[0]) {
|
|
+ TIFFError(tif->tif_name,
|
|
+ "Cannot handle different per-sample values for field \"%s\"",
|
|
+ _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name);
|
|
+ goto bad;
|
|
+ }
|
|
+ *pl = v[0];
|
|
+ status = 1;
|
|
+ }
|
|
+ bad:
|
|
+ if (v && v != buf)
|
|
+ _TIFFfree(v);
|
|
+ }
|
|
+ return (status);
|
|
}
|
|
|
|
/*
|
|
@@ -1340,33 +1344,37 @@
|
|
static int
|
|
TIFFFetchPerSampleLongs(TIFF* tif, TIFFDirEntry* dir, uint32* pl)
|
|
{
|
|
- uint16 samples = tif->tif_dir.td_samplesperpixel;
|
|
- int status = 0;
|
|
+ uint16 samples = tif->tif_dir.td_samplesperpixel;
|
|
+ int status = 0;
|
|
|
|
- if (CheckDirCount(tif, dir, (uint32) samples)) {
|
|
- uint32 buf[10];
|
|
- uint32* v = buf;
|
|
-
|
|
- if (samples > NITEMS(buf))
|
|
- v = (uint32*) CheckMalloc(tif, samples, sizeof(uint32),
|
|
- "to fetch per-sample values");
|
|
- if (v && TIFFFetchLongArray(tif, dir, v)) {
|
|
- uint16 i;
|
|
- for (i = 1; i < samples; i++)
|
|
- if (v[i] != v[0]) {
|
|
- TIFFError(tif->tif_name,
|
|
- "Cannot handle different per-sample values for field \"%s\"",
|
|
- _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name);
|
|
- goto bad;
|
|
- }
|
|
- *pl = v[0];
|
|
- status = 1;
|
|
- }
|
|
- bad:
|
|
- if (v && v != buf)
|
|
- _TIFFfree(v);
|
|
- }
|
|
- return (status);
|
|
+ if (CheckDirCount(tif, dir, (uint32) samples)) {
|
|
+ uint32 buf[10];
|
|
+ uint32* v = buf;
|
|
+
|
|
+ if (dir->tdir_count > NITEMS(buf))
|
|
+ v = (uint32*) CheckMalloc(tif, dir->tdir_count, sizeof(uint32),
|
|
+ "to fetch per-sample values");
|
|
+ if (v && TIFFFetchLongArray(tif, dir, v)) {
|
|
+ uint16 i;
|
|
+ int check_count = dir->tdir_count;
|
|
+
|
|
+ if( samples < check_count )
|
|
+ check_count = samples;
|
|
+ for (i = 1; i < check_count; i++)
|
|
+ if (v[i] != v[0]) {
|
|
+ TIFFError(tif->tif_name,
|
|
+ "Cannot handle different per-sample values for field \"%s\"",
|
|
+ _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name);
|
|
+ goto bad;
|
|
+ }
|
|
+ *pl = v[0];
|
|
+ status = 1;
|
|
+ }
|
|
+ bad:
|
|
+ if (v && v != buf)
|
|
+ _TIFFfree(v);
|
|
+ }
|
|
+ return (status);
|
|
}
|
|
|
|
/*
|
|
@@ -1377,33 +1385,37 @@
|
|
static int
|
|
TIFFFetchPerSampleAnys(TIFF* tif, TIFFDirEntry* dir, double* pl)
|
|
{
|
|
- uint16 samples = tif->tif_dir.td_samplesperpixel;
|
|
- int status = 0;
|
|
+ uint16 samples = tif->tif_dir.td_samplesperpixel;
|
|
+ int status = 0;
|
|
|
|
- if (CheckDirCount(tif, dir, (uint32) samples)) {
|
|
- double buf[10];
|
|
- double* v = buf;
|
|
-
|
|
- if (samples > NITEMS(buf))
|
|
- v = (double*) CheckMalloc(tif, samples, sizeof (double),
|
|
- "to fetch per-sample values");
|
|
- if (v && TIFFFetchAnyArray(tif, dir, v)) {
|
|
- uint16 i;
|
|
- for (i = 1; i < samples; i++)
|
|
- if (v[i] != v[0]) {
|
|
- TIFFError(tif->tif_name,
|
|
- "Cannot handle different per-sample values for field \"%s\"",
|
|
- _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name);
|
|
- goto bad;
|
|
- }
|
|
- *pl = v[0];
|
|
- status = 1;
|
|
- }
|
|
- bad:
|
|
- if (v && v != buf)
|
|
- _TIFFfree(v);
|
|
- }
|
|
- return (status);
|
|
+ if (CheckDirCount(tif, dir, (uint32) samples)) {
|
|
+ double buf[10];
|
|
+ double* v = buf;
|
|
+
|
|
+ if (dir->tdir_count > NITEMS(buf))
|
|
+ v = (double*) CheckMalloc(tif, dir->tdir_count, sizeof (double),
|
|
+ "to fetch per-sample values");
|
|
+ if (v && TIFFFetchAnyArray(tif, dir, v)) {
|
|
+ uint16 i;
|
|
+ int check_count = dir->tdir_count;
|
|
+ if( samples < check_count )
|
|
+ check_count = samples;
|
|
+
|
|
+ for (i = 1; i < check_count; i++)
|
|
+ if (v[i] != v[0]) {
|
|
+ TIFFError(tif->tif_name,
|
|
+ "Cannot handle different per-sample values for field \"%s\"",
|
|
+ _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name);
|
|
+ goto bad;
|
|
+ }
|
|
+ *pl = v[0];
|
|
+ status = 1;
|
|
+ }
|
|
+ bad:
|
|
+ if (v && v != buf)
|
|
+ _TIFFfree(v);
|
|
+ }
|
|
+ return (status);
|
|
}
|
|
#undef NITEMS
|
|
|