Study Box: Stricter rules for loading wav files

This commit is contained in:
Sour 2020-01-01 19:29:54 -05:00
parent 67c8cb4433
commit a8d41596c0

View file

@ -11,6 +11,12 @@ shared_ptr<WavReader> WavReader::Create(uint8_t* wavData, uint32_t length)
return nullptr;
}
uint32_t riffSize = wavData[4] | (wavData[5] << 8) | (wavData[6] << 16) | (wavData[7] << 24);
if(riffSize + 8 != length) {
//Invalid RIFF header (length does not match file size)
return nullptr;
}
uint32_t channelCount = wavData[22] | (wavData[23] << 8);
if(channelCount != 1) {
//Only mono files are supported at the moment
@ -23,6 +29,12 @@ shared_ptr<WavReader> WavReader::Create(uint8_t* wavData, uint32_t length)
return nullptr;
}
uint32_t dataSize = wavData[24 + fmtSize] | (wavData[25 + fmtSize] << 8) | (wavData[26 + fmtSize] << 16) | (wavData[27 + fmtSize] << 24);
if(dataSize + 28 + fmtSize > length) {
//data chunk is too big
return nullptr;
}
uint32_t bitsPerSample = wavData[34] | (wavData[35] << 8);
if(bitsPerSample != 16) {
//Only support 16-bit samples for now