Skip to content

Commit

Permalink
Actually fail when error occurs in parseFormat
Browse files Browse the repository at this point in the history
When there's an unsupported number of bits per sample or an invalid
number of samples per block, don't only print an error message using
the error handler, but actually stop parsing the file.

This fixes mpruett#35 (also reported at
https://bugzilla.opensuse.org/show_bug.cgi?id=1026983 and
https://blogs.gentoo.org/ago/2017/02/20/audiofile-heap-based-buffer-overflow-in-imadecodeblockwave-ima-cpp/
)
  • Loading branch information
antlarr committed Mar 6, 2017
1 parent b62c902 commit a2e9eab
Showing 1 changed file with 2 additions and 0 deletions.
2 changes: 2 additions & 0 deletions libaudiofile/WAVE.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -326,13 +326,15 @@ status WAVEFile::parseFormat(const Tag &id, uint32_t size)
{
_af_error(AF_BAD_NOT_IMPLEMENTED,
"IMA ADPCM compression supports only 4 bits per sample");
return AF_FAIL;
}

int bytesPerBlock = (samplesPerBlock + 14) / 8 * 4 * channelCount;
if (bytesPerBlock > blockAlign || (samplesPerBlock % 8) != 1)
{
_af_error(AF_BAD_CODEC_CONFIG,
"Invalid samples per block for IMA ADPCM compression");
return AF_FAIL;
}

track->f.sampleWidth = 16;
Expand Down

0 comments on commit a2e9eab

Please sign in to comment.