[Scummvm-cvs-logs] CVS: scummvm/scumm bundle.cpp,1.31,1.32
Max Horn
fingolfin at users.sourceforge.net
Sat Mar 8 14:56:03 CET 2003
Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv3926
Modified Files:
bundle.cpp
Log Message:
cleanup; added warning for decoder overflows in COMI (it writes 1 byte past the output buffer...)
Index: bundle.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/bundle.cpp,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -d -r1.31 -r1.32
--- bundle.cpp 8 Mar 2003 18:51:07 -0000 1.31
+++ bundle.cpp 8 Mar 2003 22:55:09 -0000 1.32
@@ -789,14 +789,18 @@
}
{
+ const int MAX_CHANNELS = 2;
int32 left, startPos, origLeft, curTableEntry, destPos, esiReg;
int16 firstWord;
- byte sByte1 = 0, sByte2 = 0;
- int32 sDWord1 = 0, sDWord2 = 0, sDWord3 = 0, sDWord4 = 0;
+ byte sByte[MAX_CHANNELS] = {0, 0};
+ int32 sDWord1[MAX_CHANNELS] = {0, 0};
+ int32 sDWord2[MAX_CHANNELS] = {0, 0};
int32 tableEntrySum, imcTableEntry, curTablePos, outputWord, adder;
byte decompTable, otherTablePos, var3b;
byte *readPos, *dst;
uint16 readWord;
+
+ assert(0 <= channels && channels <= MAX_CHANNELS);
src = comp_input;
dst = comp_output;
@@ -822,16 +826,11 @@
}
} else {
startPos = 1;
- sByte1 = *(src++);
- sDWord1 = READ_BE_UINT32(src);
- src += 4;
- sDWord2 = READ_BE_UINT32(src);
- src += 4;
- if (channels == 2) {
- sByte2 = *(src++);
- sDWord3 = READ_BE_UINT32(src);
+ for (int i = 0; i < channels; i++) {
+ sByte[i] = *(src++);
+ sDWord1[i] = READ_BE_UINT32(src);
src += 4;
- sDWord4 = READ_BE_UINT32(src);
+ sDWord2[i] = READ_BE_UINT32(src);
src += 4;
}
}
@@ -840,18 +839,12 @@
tableEntrySum = 0;
for (int l = 0; l < channels; l++) {
if (startPos != 0) {
- if (l == 0) {
- curTablePos = sByte1;
- imcTableEntry = sDWord1;
- outputWord = sDWord2;
- } else {
- curTablePos = sByte2;
- imcTableEntry = sDWord3;
- outputWord = sDWord4;
- }
+ curTablePos = sByte[l];
+ imcTableEntry = sDWord1[l];
+ outputWord = sDWord2[l];
} else {
- imcTableEntry = 7;
curTablePos = 0;
+ imcTableEntry = 7;
outputWord = 0;
}
@@ -879,6 +872,9 @@
decompTable = curTableEntry - 2;
var3b = (1 << decompTable) << 1;
readPos = src + (tableEntrySum >> 3);
+ if (readPos+1 >= (comp_input+input_size)) {
+ printf("Overflow!!! %d >= %d\n", (int)readPos+1, (int)comp_input+input_size);
+ }
readWord = (uint16)(READ_BE_UINT16(readPos) << (tableEntrySum & 7));
otherTablePos = (byte)(readWord >> (16 - curTableEntry));
tableEntrySum += curTableEntry;
More information about the Scummvm-git-logs
mailing list