Commit a44d35d9 authored by Michael Niedermayer's avatar Michael Niedermayer

Merge commit '49568851'

* commit '49568851':
  shorten: Use a checked bytestream reader for the wave header

Conflicts:
	libavcodec/shorten.c

See: 5e9a56a0Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents af539319 49568851
...@@ -209,34 +209,36 @@ static int decode_wave_header(AVCodecContext *avctx, const uint8_t *header, ...@@ -209,34 +209,36 @@ static int decode_wave_header(AVCodecContext *avctx, const uint8_t *header,
{ {
int len, bps; int len, bps;
short wave_format; short wave_format;
const uint8_t *end= header + header_size; GetByteContext gb;
if (bytestream_get_le32(&header) != MKTAG('R', 'I', 'F', 'F')) { bytestream2_init(&gb, header, header_size);
if (bytestream2_get_le32(&gb) != MKTAG('R', 'I', 'F', 'F')) {
av_log(avctx, AV_LOG_ERROR, "missing RIFF tag\n"); av_log(avctx, AV_LOG_ERROR, "missing RIFF tag\n");
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
} }
header += 4; /* chunk size */ bytestream2_skip(&gb, 4); /* chunk size */
if (bytestream_get_le32(&header) != MKTAG('W', 'A', 'V', 'E')) { if (bytestream2_get_le32(&gb) != MKTAG('W', 'A', 'V', 'E')) {
av_log(avctx, AV_LOG_ERROR, "missing WAVE tag\n"); av_log(avctx, AV_LOG_ERROR, "missing WAVE tag\n");
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
} }
while (bytestream_get_le32(&header) != MKTAG('f', 'm', 't', ' ')) { while (bytestream2_get_le32(&gb) != MKTAG('f', 'm', 't', ' ')) {
len = bytestream_get_le32(&header); len = bytestream2_get_le32(&gb);
if (len<0 || end - header - 8 < len) if (len<0 || bytestream2_get_bytes_left(&gb) - 8 < len)
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
header += len; bytestream2_skip(&gb, len);
} }
len = bytestream_get_le32(&header); len = bytestream2_get_le32(&gb);
if (len < 16) { if (len < 16) {
av_log(avctx, AV_LOG_ERROR, "fmt chunk was too short\n"); av_log(avctx, AV_LOG_ERROR, "fmt chunk was too short\n");
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
} }
wave_format = bytestream_get_le16(&header); wave_format = bytestream2_get_le16(&gb);
switch (wave_format) { switch (wave_format) {
case WAVE_FORMAT_PCM: case WAVE_FORMAT_PCM:
...@@ -246,11 +248,11 @@ static int decode_wave_header(AVCodecContext *avctx, const uint8_t *header, ...@@ -246,11 +248,11 @@ static int decode_wave_header(AVCodecContext *avctx, const uint8_t *header,
return AVERROR(ENOSYS); return AVERROR(ENOSYS);
} }
header += 2; // skip channels (already got from shorten header) bytestream2_skip(&gb, 2); // skip channels (already got from shorten header)
avctx->sample_rate = bytestream_get_le32(&header); avctx->sample_rate = bytestream2_get_le32(&gb);
header += 4; // skip bit rate (represents original uncompressed bit rate) bytestream2_skip(&gb, 4); // skip bit rate (represents original uncompressed bit rate)
header += 2; // skip block align (not needed) bytestream2_skip(&gb, 2); // skip block align (not needed)
bps = bytestream_get_le16(&header); bps = bytestream2_get_le16(&gb);
avctx->bits_per_coded_sample = bps; avctx->bits_per_coded_sample = bps;
if (bps != 16 && bps != 8) { if (bps != 16 && bps != 8) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment