aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm/imuse_digi/dimuse.cpp
diff options
context:
space:
mode:
authorTorbjörn Andersson2013-06-04 06:11:41 +0200
committerTorbjörn Andersson2013-06-04 06:11:41 +0200
commit08be91604900f0d43380b3429a2aef87378c710f (patch)
tree120af1528730843f22d40039330040092bf6af7a /engines/scumm/imuse_digi/dimuse.cpp
parent1cc0e9cb8813a39c9f9d95287b811dbb534e3868 (diff)
downloadscummvm-rg350-08be91604900f0d43380b3429a2aef87378c710f.tar.gz
scummvm-rg350-08be91604900f0d43380b3429a2aef87378c710f.tar.bz2
scummvm-rg350-08be91604900f0d43380b3429a2aef87378c710f.zip
SCUMM: Verify sample width in Digital iMUSE callback. CID 1002112
Verify that 'bits' really is one of 8, 12 or 16 before decoding the data. It's probably always the case (unless the data files are damaged) but if it isn't we'll either try to queue NULL to the audio stream, or queue the same buffer more than once, or free the buffer more than once. All of which are bad, though Coverity only noticed the last of these cases.
Diffstat (limited to 'engines/scumm/imuse_digi/dimuse.cpp')
-rw-r--r--engines/scumm/imuse_digi/dimuse.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/engines/scumm/imuse_digi/dimuse.cpp b/engines/scumm/imuse_digi/dimuse.cpp
index eb3717494f..a737539c44 100644
--- a/engines/scumm/imuse_digi/dimuse.cpp
+++ b/engines/scumm/imuse_digi/dimuse.cpp
@@ -275,9 +275,12 @@ void IMuseDigital::callback() {
feedSize &= ~1;
if (channels == 2)
feedSize &= ~3;
- } else {
+ } else if (bits == 8) {
if (channels == 2)
feedSize &= ~1;
+ } else {
+ warning("IMuseDigita::callback: Unexpected sample width, %d bits", bits);
+ continue;
}
if (feedSize == 0)