[Scummvm-cvs-logs] CVS: scummvm/scumm script.cpp,1.46,1.47

Max Horn fingolfin at users.sourceforge.net
Thu Mar 6 18:43:10 CET 2003


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv5627

Modified Files:
	script.cpp 
Log Message:
ouch - fixed OOB access on _baseFLObject; also added various sanity checks (thx valgrind)

Index: script.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script.cpp,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -d -r1.46 -r1.47
--- script.cpp	6 Mar 2003 21:46:17 -0000	1.46
+++ script.cpp	7 Mar 2003 02:42:39 -0000	1.47
@@ -234,6 +234,7 @@
 	case WIO_INVENTORY:					/* inventory script * */
 		idx = getObjectIndex(ss->number);
 		_scriptOrgPointer = getResourceAddress(rtInventory, idx);
+		assert(idx < _maxInventoryItems);
 		_lastCodePtr = &_baseInventoryItems[idx];
 		break;
 
@@ -241,22 +242,26 @@
 	case WIO_ROOM:								/* room script */
 		if (_features & GF_AFTER_V8) {
 			_scriptOrgPointer = getResourceAddress(rtRoomScripts, _roomResource);
+			assert(_roomResource < res.num[rtRoomScripts]);
 			_lastCodePtr = &res.address[rtRoomScripts][_roomResource];
 		} else {
 			_scriptOrgPointer = getResourceAddress(rtRoom, _roomResource);
+			assert(_roomResource < _maxRooms);
 			_lastCodePtr = &_baseRooms[_roomResource];
 		}
 		break;
 
 	case WIO_GLOBAL:							/* global script */
 		_scriptOrgPointer = getResourceAddress(rtScript, ss->number);
+		assert(ss->number < _maxScripts);
 		_lastCodePtr = &_baseScripts[ss->number];
 		break;
 
 	case WIO_FLOBJECT:						/* flobject script */
 		idx = getObjectIndex(ss->number);
 		_scriptOrgPointer = getResourceAddress(rtFlObject, _objs[idx].fl_object_index);
-		_lastCodePtr = &_baseFLObject[ss->number];
+		assert(idx < _maxFLObject);
+		_lastCodePtr = &_baseFLObject[idx];
 		break;
 	default:
 		error("Bad type while getting base address");





More information about the Scummvm-git-logs mailing list