From a5bd4409319614f166a83934baddceed7e6c58b4 Mon Sep 17 00:00:00 2001 From: Jean-Marc Valin Date: Tue, 4 Dec 2012 14:13:00 -0500 Subject: [PATCH] Don't update the internal decoder state until we know the packet is valid --- src/opus_decoder.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/opus_decoder.c b/src/opus_decoder.c index 98de210a..015ae17a 100644 --- a/src/opus_decoder.c +++ b/src/opus_decoder.c @@ -785,17 +785,20 @@ int opus_decode_native(OpusDecoder *st, const unsigned char *data, return frame_size; } tot_offset = 0; - st->mode = packet_mode; - st->bandwidth = packet_bandwidth; - st->frame_size = packet_frame_size; - st->stream_channels = packet_stream_channels; if (count < 0) return count; tot_offset += offset; - if (count*st->frame_size > frame_size) + if (count*packet_frame_size > frame_size) return OPUS_BUFFER_TOO_SMALL; + + /* Update the state as the last step to avoid updating it on an invalid packet */ + st->mode = packet_mode; + st->bandwidth = packet_bandwidth; + st->frame_size = packet_frame_size; + st->stream_channels = packet_stream_channels; + nb_samples=0; for (i=0;i