X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fws-snd1.c;h=85e04f55d4fba4d58ad1d684459f2fc040573a15;hb=e581b6288f7c8c356593842c172cf867ca4177d6;hp=eb4fe81d3f201a4d3759d3898628aba208edb66a;hpb=8aaed74c4b57de5247185efb2af95ddbd69f3620;p=ffmpeg diff --git a/libavcodec/ws-snd1.c b/libavcodec/ws-snd1.c index eb4fe81d3f2..85e04f55d4f 100644 --- a/libavcodec/ws-snd1.c +++ b/libavcodec/ws-snd1.c @@ -18,10 +18,12 @@ * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ + +#include "libavutil/intreadwrite.h" #include "avcodec.h" /** - * @file ws-snd.c + * @file libavcodec/ws-snd1.c * Westwood SNDx codecs. * * Reference documents about VQA format and its audio codecs @@ -36,17 +38,20 @@ static const char ws_adpcm_4bit[] = { #define CLIP8(a) if(a>127)a=127;if(a<-128)a=-128; -static int ws_snd_decode_init(AVCodecContext * avctx) +static av_cold int ws_snd_decode_init(AVCodecContext * avctx) { // WSSNDContext *c = avctx->priv_data; + avctx->sample_fmt = SAMPLE_FMT_S16; return 0; } static int ws_snd_decode_frame(AVCodecContext *avctx, void *data, int *data_size, - uint8_t *buf, int buf_size) + AVPacket *avpkt) { + const uint8_t *buf = avpkt->data; + int buf_size = avpkt->size; // WSSNDContext *c = avctx->priv_data; int in_size, out_size; @@ -57,11 +62,19 @@ static int ws_snd_decode_frame(AVCodecContext *avctx, if (!buf_size) return 0; - out_size = LE_16(&buf[0]); + out_size = AV_RL16(&buf[0]); *data_size = out_size * 2; - in_size = LE_16(&buf[2]); + in_size = AV_RL16(&buf[2]); buf += 4; + if (out_size > *data_size) { + av_log(avctx, AV_LOG_ERROR, "Frame is too large to fit in buffer\n"); + return -1; + } + if (in_size > buf_size) { + av_log(avctx, AV_LOG_ERROR, "Frame data is larger than input buffer\n"); + return -1; + } if (in_size == out_size) { for (i = 0; i < out_size; i++) *samples++ = (*buf++ - 0x80) << 8; @@ -141,4 +154,5 @@ AVCodec ws_snd1_decoder = { NULL, NULL, ws_snd_decode_frame, + .long_name = NULL_IF_CONFIG_SMALL("Westwood Audio (SND1)"), };