diff --git a/image/png.cpp b/image/png.cpp index 37617a16909..e11f0459d29 100644 --- a/image/png.cpp +++ b/image/png.cpp @@ -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: diff --git a/image/png.h b/image/png.h index 7ecf68e76d3..cdc3e3faf16 100644 --- a/image/png.h +++ b/image/png.h @@ -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; };