[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