[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