ref: a5bd4409319614f166a83934baddceed7e6c58b4
parent: 7fcd66c40d0257796c912a6f500a98cbea89e704
author: Jean-Marc Valin <[email protected]>
date: Tue Dec 4 09:13:00 EST 2012
Don't update the internal decoder state until we know the packet is valid
--- a/src/opus_decoder.c
+++ b/src/opus_decoder.c
@@ -785,17 +785,20 @@
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<count;i++)
{