diff --git a/src/S3/CMakeLists.txt b/src/S3/CMakeLists.txt index e3c1c2b8..46e5523a 100644 --- a/src/S3/CMakeLists.txt +++ b/src/S3/CMakeLists.txt @@ -18,6 +18,9 @@ else() /wd4996 ) endif() +if(DETHRACE_FIX_BUGS) + target_compile_definitions(s3 PRIVATE DETHRACE_FIX_BUGS) +endif() if(IS_BIGENDIAN) target_compile_definitions(s3 PRIVATE BR_ENDIAN_BIG=1) diff --git a/src/S3/audio.c b/src/S3/audio.c index da06d6fa..c787136a 100644 --- a/src/S3/audio.c +++ b/src/S3/audio.c @@ -962,6 +962,13 @@ void S3CalculateRandomizedFields(tS3_channel* chan, tS3_descriptor* desc) { chan->left_volume = vol; chan->right_volume = vol; if (desc->type == eS3_ST_sample) { +#if defined(DETHRACE_FIX_BUGS) + /* Avoid a possible NULL pointer dereference. */ + if (desc->sound_data == NULL) { + chan->rate = desc->min_pitch; + return; + } +#endif chan->rate = S3IRandomBetweenLog(desc->min_pitch, desc->max_pitch, ((tS3_sample*)desc->sound_data)->rate); } }