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

drmccoy at users.sourceforge.net drmccoy at users.sourceforge.net
Mon Feb 5 20:48:16 CET 2007


Revision: 25395
          http://scummvm.svn.sourceforge.net/scummvm/?rev=25395&view=rev
Author:   drmccoy
Date:     2007-02-05 11:48:12 -0800 (Mon, 05 Feb 2007)

Log Message:
-----------
Corrected the clipping of _pressedMapX/_pressedMapY, to avoid accessing invalid memory (also possible fix for bug #1652551)

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

Modified: scummvm/trunk/engines/gob/goblin.cpp
===================================================================
--- scummvm/trunk/engines/gob/goblin.cpp	2007-02-05 14:22:10 UTC (rev 25394)
+++ scummvm/trunk/engines/gob/goblin.cpp	2007-02-05 19:48:12 UTC (rev 25395)
@@ -798,6 +798,8 @@
 		}
 
 	}
+	_pressedMapX = CLIP((int) _pressedMapX, 0, _vm->_map->_mapWidth - 1);
+	_pressedMapY = CLIP((int) _pressedMapY, 0, _vm->_map->_mapHeight - 1);
 }
 
 void Goblin::adjustTarget(void) {
@@ -819,6 +821,8 @@
 			_pressedMapX++;
 		}
 	}
+	_pressedMapX = CLIP((int) _pressedMapX, 0, _vm->_map->_mapWidth - 1);
+	_pressedMapY = CLIP((int) _pressedMapY, 0, _vm->_map->_mapHeight - 1);
 }
 
 void Goblin::targetDummyItem(Gob_Object *gobDesc) {
@@ -984,6 +988,8 @@
 			}
 		}
 	}
+	_pressedMapX = CLIP((int) _pressedMapX, 0, _vm->_map->_mapWidth - 1);
+	_pressedMapY = CLIP((int) _pressedMapY, 0, _vm->_map->_mapHeight - 1);
 }
 
 void Goblin::moveFindItem(int16 posX, int16 posY) {
@@ -1021,8 +1027,8 @@
 			break;
 		}
 
-		_pressedMapX = MIN(posX / 12, _vm->_map->_mapWidth - 1);
-		_pressedMapY = MIN(posY / 6, _vm->_map->_mapHeight - 1);
+		_pressedMapX = posX / 12;
+		_pressedMapY = posY / 6;
 
 		if (_vm->_map->_itemsMap[_pressedMapY][_pressedMapX] == 0
 		    && i < 20) {
@@ -1063,6 +1069,8 @@
 		_pressedMapX = posX / 12;
 		_pressedMapY = posY / 6;
 	}
+	_pressedMapX = CLIP((int) _pressedMapX, 0, _vm->_map->_mapWidth - 1);
+	_pressedMapY = CLIP((int) _pressedMapY, 0, _vm->_map->_mapHeight - 1);
 }
 
 void Goblin::moveCheckSelect(int16 framesCount, Gob_Object * gobDesc, int16 *pGobIndex,


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