shithub: opus

Download patch

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++)
    {