[Scummvm-cvs-logs] SF.net SVN: scummvm:[50297] scummvm/trunk/engines/m4/sprite.cpp
dreammaster at users.sourceforge.net
dreammaster at users.sourceforge.net
Sat Jun 26 02:36:43 CEST 2010
Revision: 50297
http://scummvm.svn.sourceforge.net/scummvm/?rev=50297&view=rev
Author: dreammaster
Date: 2010-06-26 00:36:43 +0000 (Sat, 26 Jun 2010)
Log Message:
-----------
Added extra validation for sprite decoding
Modified Paths:
--------------
scummvm/trunk/engines/m4/sprite.cpp
Modified: scummvm/trunk/engines/m4/sprite.cpp
===================================================================
--- scummvm/trunk/engines/m4/sprite.cpp 2010-06-26 00:28:29 UTC (rev 50296)
+++ scummvm/trunk/engines/m4/sprite.cpp 2010-06-26 00:36:43 UTC (rev 50297)
@@ -121,6 +121,8 @@
// TODO: The sprite outlines (pixel value 0xFD) are not shown
void M4Sprite::loadMadsSprite(Common::SeekableReadStream* source) {
+ bool spriteEnd = false;
+
// Set entire sprite contents to transparent pixels
fillRect(bounds(), TRANSPARENT_COLOUR_INDEX);
@@ -131,10 +133,14 @@
byte cmd = source->readByte();
int x2 = 0;
- if (cmd == 0xff)
+ if (cmd == 0xfc) {
+ // End of entire sprite
+ spriteEnd = true;
+ break;
+ } else if (cmd == 0xff) {
// The entire line is empty
newLine = true;
- else if (cmd == 0xFD) {
+ } else if (cmd == 0xFD) {
// Lines contains only run lenghs of pixels
while (x2 < w) {
cmd = source->readByte();
@@ -189,6 +195,11 @@
} while (source->readByte() != 0xff);
}
}
+
+ if (!spriteEnd) {
+ byte v = source->readByte();
+ assert(v == 0xFC);
+ }
}
byte M4Sprite::getTransparencyIndex() const {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list