diff options
author | Simon Howard | 2007-02-14 19:10:30 +0000 |
---|---|---|
committer | Simon Howard | 2007-02-14 19:10:30 +0000 |
commit | 10547d4138a678caed15c546877679b65bf2e1db (patch) | |
tree | 78091f52b42d4c2dde98cf019796a723cb9b493e | |
parent | 28c6c516062451900f9efc1cfb758eaab1165bc2 (diff) | |
download | chocolate-doom-10547d4138a678caed15c546877679b65bf2e1db.tar.gz chocolate-doom-10547d4138a678caed15c546877679b65bf2e1db.tar.bz2 chocolate-doom-10547d4138a678caed15c546877679b65bf2e1db.zip |
Read sound length as a 32 bit field, not 16 bit. Fixes death sound in
marina.wad.
Subversion-branch: /trunk/chocolate-doom
Subversion-revision: 834
-rw-r--r-- | src/i_sound.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/i_sound.c b/src/i_sound.c index 405cbfa2..15ad27d6 100644 --- a/src/i_sound.c +++ b/src/i_sound.c @@ -194,8 +194,8 @@ static boolean CacheSFX(int sound) int lumpnum; int lumplen; int samplerate; - int length; - int expanded_length; + unsigned int length; + unsigned int expanded_length; byte *data; // need to load the sound @@ -207,16 +207,17 @@ static boolean CacheSFX(int sound) // Check the header, and ensure this is a valid sound if (lumplen < 8 - || data[0] != 0x03 || data[1] != 0x00 - || data[6] != 0x00 || data[7] != 0x00) + || data[0] != 0x03 || data[1] != 0x00) { // Invalid sound return false; } + // 16 bit sample rate field, 32 bit length field + samplerate = (data[3] << 8) | data[2]; - length = (data[5] << 8) | data[4]; + length = (data[7] << 24) | (data[6] << 16) | (data[5] << 8) | data[4]; // If the header specifies that the length of the sound is greater than // the length of the lump itself, this is an invalid sound lump @@ -226,7 +227,7 @@ static boolean CacheSFX(int sound) return false; } - expanded_length = (length * 22050) / (samplerate / 4); + expanded_length = (uint32_t) ((((uint64_t) length) * 4 * 22050) / samplerate); sound_chunks[sound].allocated = 1; sound_chunks[sound].alen = expanded_length; @@ -234,7 +235,7 @@ static boolean CacheSFX(int sound) = Z_Malloc(expanded_length, PU_STATIC, &sound_chunks[sound].abuf); sound_chunks[sound].volume = MIX_MAX_VOLUME; - ExpandSoundData(data + 8, samplerate, length, &sound_chunks[sound]); + ExpandSoundData(data + 8, samplerate, length - 8, &sound_chunks[sound]); // don't need the original lump any more |