From: <sv...@op...> - 2025-01-02 20:04:23
|
Author: sagamusix Date: Thu Jan 2 21:04:16 2025 New Revision: 22693 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22693 Log: Merged revision(s) 14228 from trunk/OpenMPT: [Fix] Possible crash when loading floating-point WAV file that claimed to have a bit depth <= 8 bits as a module. Floating-point WAV files with a bit depth lower than 32 bits are now always rejected (both when loading as a module and when loading as a sample). (partial backport of r14228 just to make the fuzzers shut up) ........ Modified: branches/OpenMPT-1.28/ (props changed) branches/OpenMPT-1.28/soundlib/Load_wav.cpp branches/OpenMPT-1.28/soundlib/SampleFormats.cpp Modified: branches/OpenMPT-1.28/soundlib/Load_wav.cpp ============================================================================== --- branches/OpenMPT-1.28/soundlib/Load_wav.cpp Thu Jan 2 17:52:57 2025 (r22692) +++ branches/OpenMPT-1.28/soundlib/Load_wav.cpp Thu Jan 2 21:04:16 2025 (r22693) @@ -64,11 +64,13 @@ WAVReader wavFile(file); if(!wavFile.IsValid() - || wavFile.GetNumChannels() == 0 - || wavFile.GetNumChannels() > MAX_BASECHANNELS - || wavFile.GetBitsPerSample() == 0 - || wavFile.GetBitsPerSample() > 32 - || (wavFile.GetSampleFormat() != WAVFormatChunk::fmtPCM && wavFile.GetSampleFormat() != WAVFormatChunk::fmtFloat)) + || wavFile.GetNumChannels() == 0 + || wavFile.GetNumChannels() > MAX_BASECHANNELS + || wavFile.GetNumChannels() >= MAX_SAMPLES + || wavFile.GetBitsPerSample() == 0 + || wavFile.GetBitsPerSample() > 32 + || (wavFile.GetBitsPerSample() < 32 && wavFile.GetSampleFormat() == WAVFormatChunk::fmtFloat) + || (wavFile.GetSampleFormat() != WAVFormatChunk::fmtPCM && wavFile.GetSampleFormat() != WAVFormatChunk::fmtFloat)) { return false; } else if(loadFlags == onlyVerifyHeader) Modified: branches/OpenMPT-1.28/soundlib/SampleFormats.cpp ============================================================================== --- branches/OpenMPT-1.28/soundlib/SampleFormats.cpp Thu Jan 2 17:52:57 2025 (r22692) +++ branches/OpenMPT-1.28/soundlib/SampleFormats.cpp Thu Jan 2 21:04:16 2025 (r22693) @@ -421,11 +421,12 @@ WAVReader wavFile(file); if(!wavFile.IsValid() - || wavFile.GetNumChannels() == 0 - || wavFile.GetNumChannels() > 2 - || (wavFile.GetBitsPerSample() == 0 && wavFile.GetSampleFormat() != WAVFormatChunk::fmtMP3) - || (wavFile.GetBitsPerSample() > 64) - || (wavFile.GetSampleFormat() != WAVFormatChunk::fmtPCM && wavFile.GetSampleFormat() != WAVFormatChunk::fmtFloat && wavFile.GetSampleFormat() != WAVFormatChunk::fmtIMA_ADPCM && wavFile.GetSampleFormat() != WAVFormatChunk::fmtMP3 && wavFile.GetSampleFormat() != WAVFormatChunk::fmtALaw && wavFile.GetSampleFormat() != WAVFormatChunk::fmtULaw)) + || wavFile.GetNumChannels() == 0 + || wavFile.GetNumChannels() > 2 + || (wavFile.GetBitsPerSample() == 0 && wavFile.GetSampleFormat() != WAVFormatChunk::fmtMP3) + || (wavFile.GetBitsPerSample() < 32 && wavFile.GetSampleFormat() == WAVFormatChunk::fmtFloat) + || (wavFile.GetBitsPerSample() > 64) + || (wavFile.GetSampleFormat() != WAVFormatChunk::fmtPCM && wavFile.GetSampleFormat() != WAVFormatChunk::fmtFloat && wavFile.GetSampleFormat() != WAVFormatChunk::fmtIMA_ADPCM && wavFile.GetSampleFormat() != WAVFormatChunk::fmtMP3 && wavFile.GetSampleFormat() != WAVFormatChunk::fmtALaw && wavFile.GetSampleFormat() != WAVFormatChunk::fmtULaw)) { return false; } |