- const bool hasAlpha = (extraSamples == 1 &&
- (samplesInfo[0] == EXTRASAMPLE_ASSOCALPHA ||
- samplesInfo[0] == EXTRASAMPLE_UNASSALPHA));
+ if (!TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &photometric))
+ {
+ photometric = PHOTOMETRIC_MINISWHITE;
+ }
+ const bool hasAlpha = (extraSamples >= 1
+ && ((samplesInfo[0] == EXTRASAMPLE_UNSPECIFIED && samplesPerPixel > 3)
+ || samplesInfo[0] == EXTRASAMPLE_ASSOCALPHA
+ || samplesInfo[0] == EXTRASAMPLE_UNASSALPHA))
+ || (extraSamples == 0 && samplesPerPixel == 4
+ && photometric == PHOTOMETRIC_RGB);
+
+ // guard against integer overflow during multiplication which could result
+ // in allocating a too small buffer and then overflowing it
+ const double bytesNeeded = (double)w * (double)h * sizeof(uint32);
+ if ( bytesNeeded >= wxUINT32_MAX )
+ {
+ if ( verbose )
+ {
+ wxLogError( _("TIFF: Image size is abnormally big.") );
+ }