[Scummvm-cvs-logs] CVS: scummvm/scumm script_v6.cpp,1.363,1.364

Max Horn fingolfin at users.sourceforge.net
Sat Jul 31 18:22:05 CEST 2004


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27959

Modified Files:
	script_v6.cpp 
Log Message:
Cleanup & enhanced error messages

Index: script_v6.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v6.cpp,v
retrieving revision 1.363
retrieving revision 1.364
diff -u -d -r1.363 -r1.364
--- script_v6.cpp	25 Jul 2004 11:29:38 -0000	1.363
+++ script_v6.cpp	1 Aug 2004 01:21:26 -0000	1.364
@@ -498,16 +498,19 @@
 		error("readArray: invalid array %d (%d)", array, readVar(array));
 	}
 
-	base += idx * FROM_LE_16(ah->dim1);
+	const int offset = base + idx * FROM_LE_16(ah->dim1);
 
-	assert(base >= 0 && base < FROM_LE_16(ah->dim1) * FROM_LE_16(ah->dim2));
+	if (offset < 0 || offset >= FROM_LE_16(ah->dim1) * FROM_LE_16(ah->dim2)) {
+		error("readArray: array %d out of bounds: [%d,%d] exceeds [%d,%d]",
+			array, base, idx, FROM_LE_16(ah->dim1), FROM_LE_16(ah->dim2));
+	}
 
 	if (FROM_LE_16(ah->type) == 4 || (_heversion >= 60 && FROM_LE_16(ah->type) == rtCostume)) {
-		return ah->data[base];
+		return ah->data[offset];
 	} else if (_version == 8) {
-		return (int32)READ_LE_UINT32(ah->data + base * 4);
+		return (int32)READ_LE_UINT32(ah->data + offset * 4);
 	} else {
-		return (int16)READ_LE_UINT16(ah->data + base * 2);
+		return (int16)READ_LE_UINT16(ah->data + offset * 2);
 	}
 }
 
@@ -515,26 +518,20 @@
 	ArrayHeader *ah = getArray(array);
 	if (!ah)
 		return;
-	base += idx * FROM_LE_16(ah->dim1);
 
-	assert(base >= 0 && base < FROM_LE_16(ah->dim1) * FROM_LE_16(ah->dim2));
+	const int offset = base + idx * FROM_LE_16(ah->dim1);
+
+	if (offset < 0 || offset >= FROM_LE_16(ah->dim1) * FROM_LE_16(ah->dim2)) {
+		error("writeArray: array %d out of bounds: [%d,%d] exceeds [%d,%d]",
+			array, base, idx, FROM_LE_16(ah->dim1), FROM_LE_16(ah->dim2));
+	}
 
 	if (FROM_LE_16(ah->type) == rtSound || (_heversion >= 60 && FROM_LE_16(ah->type) == rtCostume)) {
-		ah->data[base] = value;
+		ah->data[offset] = value;
 	} else if (_version == 8) {
-#if defined(SCUMM_NEED_ALIGNMENT)
-		uint32 tmp = TO_LE_32(value);
-		memcpy(&ah->data[base*4], &tmp, 4);
-#else
-		((uint32 *)ah->data)[base] = TO_LE_32(value);
-#endif
+		WRITE_LE_UINT32(ah->data + offset * 4, value);
 	} else {
-#if defined(SCUMM_NEED_ALIGNMENT)
-		uint16 tmp = TO_LE_16(value);
-		memcpy(&ah->data[base*2], &tmp, 2);
-#else
-		((uint16 *)ah->data)[base] = TO_LE_16(value);
-#endif
+		WRITE_LE_UINT16(ah->data + offset * 2, value);
 	}
 }
 





More information about the Scummvm-git-logs mailing list