IMAGE: add flag to skip signature check in png decoder

This commit is contained in:
yinsimei 2017-07-01 13:41:42 +02:00 committed by Eugene Sandulenko
parent 5469aaf8ec
commit 1a27d67123
2 changed files with 13 additions and 7 deletions

View File

@ -39,7 +39,7 @@
namespace Image {
PNGDecoder::PNGDecoder() : _outputSurface(0), _palette(0), _paletteColorCount(0) {
PNGDecoder::PNGDecoder() : _outputSurface(0), _palette(0), _paletteColorCount(0), _skipSignature(false) {
}
PNGDecoder::~PNGDecoder() {
@ -99,12 +99,14 @@ bool PNGDecoder::loadStream(Common::SeekableReadStream &stream) {
#ifdef USE_PNG
destroy();
// First, check the PNG signature
if (stream.readUint32BE() != MKTAG(0x89, 'P', 'N', 'G')) {
return false;
}
if (stream.readUint32BE() != MKTAG(0x0d, 0x0a, 0x1a, 0x0a)) {
return false;
// First, check the PNG signature (if not set to skip it)
if (!_skipSignature) {
if (stream.readUint32BE() != MKTAG(0x89, 'P', 'N', 'G')) {
return false;
}
if (stream.readUint32BE() != MKTAG(0x0d, 0x0a, 0x1a, 0x0a)) {
return false;
}
}
// The following is based on the guide provided in:

View File

@ -56,10 +56,14 @@ public:
const Graphics::Surface *getSurface() const { return _outputSurface; }
const byte *getPalette() const { return _palette; }
uint16 getPaletteColorCount() const { return _paletteColorCount; }
void setSkipSignature(bool skip) { _skipSignature = skip; }
private:
byte *_palette;
uint16 _paletteColorCount;
// flag to skip the png signature check for headless png files
bool _skipSignature;
Graphics::Surface *_outputSurface;
};