diff options
-rw-r--r-- | scumm/imuse_digi/dimuse_bndmgr.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/scumm/imuse_digi/dimuse_bndmgr.cpp b/scumm/imuse_digi/dimuse_bndmgr.cpp index a763d78485..329311e73e 100644 --- a/scumm/imuse_digi/dimuse_bndmgr.cpp +++ b/scumm/imuse_digi/dimuse_bndmgr.cpp @@ -204,11 +204,13 @@ int32 BundleMgr::decompressSampleByIndex(int32 index, int32 offset, int32 size, int skip = offset - (first_block * 0x2000) + header_size; + // CMI hack: one more zero byte at the end of input buffer + comp_input = (byte *)malloc(0x2000); + comp_input[0x2000-1] = 0; + for (i = first_block; i <= last_block; i++) { assert(size); - // CMI hack: one more zero byte at the end of input buffer - comp_input = (byte *)malloc(_compTable[i].size + 1); - comp_input[_compTable[i].size] = 0; + assert(0x2000 >= _compTable[i].size + 1); byte *curBuf; if (_lastBlock != i) { @@ -236,9 +238,8 @@ int32 BundleMgr::decompressSampleByIndex(int32 index, int32 offset, int32 size, final_size += output_size; size -= output_size; skip = 0; - - free(comp_input); } + free(comp_input); free(comp_output); return final_size; |