[Scummvm-cvs-logs] SF.net SVN: scummvm: [24866] scummvm/trunk/engines/gob/draw_v2.cpp

drmccoy at users.sourceforge.net drmccoy at users.sourceforge.net
Sun Dec 17 22:21:51 CET 2006


Revision: 24866
          http://scummvm.svn.sourceforge.net/scummvm/?rev=24866&view=rev
Author:   drmccoy
Date:     2006-12-17 13:20:51 -0800 (Sun, 17 Dec 2006)

Log Message:
-----------
Added a range check in Draw_v2::printText(), fixing invalid reads. It *shouldn't* pose any problem
s

Modified Paths:
--------------
    scummvm/trunk/engines/gob/draw_v2.cpp

Modified: scummvm/trunk/engines/gob/draw_v2.cpp
===================================================================
--- scummvm/trunk/engines/gob/draw_v2.cpp	2006-12-17 19:41:41 UTC (rev 24865)
+++ scummvm/trunk/engines/gob/draw_v2.cpp	2006-12-17 21:20:51 UTC (rev 24866)
@@ -118,6 +118,7 @@
 	int16 strPosBak;
 	int16 maskChar;
 	int16 width;
+	int16 size;
 
 	index = _vm->_inter->load16();
 
@@ -126,6 +127,7 @@
 	if ((_vm->_game->_totTextData == 0) || (_vm->_game->_totTextData->dataPtr == 0))
 		return;
 
+	size = _vm->_game->_totTextData->items[index].size;
 	dataPtr = _vm->_game->_totTextData->dataPtr + _vm->_game->_totTextData->items[index].offset;
 	ptr = dataPtr;
 
@@ -158,7 +160,7 @@
 
 	ptr += 8;
 
-	_backColor = *ptr++;
+	_backColor = (byte) *ptr++;
 	_transparency = 1;
 
 	spriteOperation(DRAW_CLEARRECT);
@@ -189,7 +191,9 @@
 	}
 	ptr += 2;
 
-	for (ptr2 = ptr; *ptr2 != 1; ptr2++) {
+	// Adding the boundary check *shouldn't* pose any problems, since access behind
+	// that point should be forbidden anyway.
+	for (i = 0, ptr2 = ptr; ((ptr2 - dataPtr) < size) && (*ptr2 != 1); ptr2++, i++) {
 		if ((_vm->_game->_totFileData[0x29] < 0x32) && (*ptr2 > 3) && (*ptr2 < 32))
 			*ptr2 = 32;
 
@@ -226,7 +230,7 @@
 			break;
 
 		case 10:
-			ptr2 += (ptr2[1] * 2) + 2;
+			ptr2 += (((byte) ptr2[1]) * 2) + 2;
 			break;
 
 		default:
@@ -337,7 +341,7 @@
 
 		case 4:
 			ptr++;
-			frontColor = *ptr++;
+			frontColor = (byte) *ptr++;
 			break;
 
 		case 6:


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