diff --git a/src/miami/audio/sampman.h b/src/miami/audio/sampman.h index 40cb8e0b..3f8413ad 100644 --- a/src/miami/audio/sampman.h +++ b/src/miami/audio/sampman.h @@ -115,7 +115,7 @@ enum #endif }; #define MAX_PEDSFX 7 -#define PED_BLOCKSIZE 79000 +#define PED_BLOCKSIZE 105504 #define PED_BLOCKSIZE_ADPCM (PED_BLOCKSIZE/4) #define MAXPROVIDERS 64 diff --git a/src/miami/audio/sampman_dc.cpp b/src/miami/audio/sampman_dc.cpp index 0f0cad55..dce011c3 100644 --- a/src/miami/audio/sampman_dc.cpp +++ b/src/miami/audio/sampman_dc.cpp @@ -772,7 +772,7 @@ cSampleManager::LoadPedComment(uint32 nComment) } } - assert(m_aSamples[nComment].nByteSize < PED_BLOCKSIZE_ADPCM); + assert(m_aSamples[nComment].nByteSize <= PED_BLOCKSIZE_ADPCM); debugf("Loading ped comment %d, offset: %d, size: %d\n", nComment, m_aSamples[nComment].nFileOffset, m_aSamples[nComment].nByteSize); CdStreamQueueAudioRead(nComment, (void*)nPedSlotSfxAddr[nCurrentPedSlot], m_aSamples[nComment].nByteSize, m_aSamples[nComment].nFileOffset, [](AudioReadCmd* cmd) { @@ -1340,11 +1340,16 @@ cSampleManager::InitialiseSampleBanks(void) channels[i].nBank = -1; } + // validate all ped comments are within bounds + for (uint32 nComment = SAMPLEBANK_PED_START; nComment <= SAMPLEBANK_PED_END; nComment++) { + assert(m_aSamples[nComment].nByteSize <= PED_BLOCKSIZE_ADPCM); + } #ifdef FIX_BUGS + // Find biggest player comment uint32 nMaxPlayerSize = 0; for (uint32 i = PLAYER_COMMENTS_START; i <= PLAYER_COMMENTS_END; i++) - nMaxPlayerSize = Max(nMaxPlayerSize, m_aSamples[i].nByteSize); + nMaxPlayerSize = Max(nMaxPlayerSize, m_aSamples[i].nByteSize); debugf("Max player comment size: %d\n", nMaxPlayerSize); gPlayerTalkData = snd_mem_malloc(nMaxPlayerSize);