shithub: opus

Download patch

ref: 05942e77a23efcda10c0b8d0c08aaf23221a044b
parent: f1db6b9d75574ba292c75fdfee3eeda19745f73e
author: Jean-Marc Valin <jmvalin@amazon.com>
date: Wed Jan 25 11:47:10 EST 2023

Fix padding overwriting the packet content

--- a/src/repacketizer.c
+++ b/src/repacketizer.c
@@ -107,6 +107,7 @@
    opus_int16 *len;
    const unsigned char **frames;
    unsigned char * ptr;
+   int ones_begin=0, ones_end=0;
 
    if (begin<0 || begin>=end || end>rp->nb_frames)
    {
@@ -205,8 +206,8 @@
             return OPUS_BUFFER_TOO_SMALL;
          OPUS_MOVE(&data[tot_size+pad_amount-ext_len], &data[tot_size], ext_len);
          /* Prepend 0x01 padding */
-         for (i=tot_size+nb_255s+1;i<tot_size+pad_amount-ext_len;i++)
-            data[i] = 0x01;
+         ones_begin = tot_size+nb_255s+1;
+         ones_end = tot_size+pad_amount-ext_len;
          for (i=0;i<nb_255s;i++)
             *ptr++ = 255;
          *ptr++ = pad_amount-255*nb_255s-1;
@@ -232,6 +233,8 @@
       OPUS_MOVE(ptr, frames[i], len[i]);
       ptr += len[i];
    }
+   for (i=ones_begin;i<ones_end;i++)
+      data[i] = 0x01;
    if (pad && nb_extensions==0)
    {
       /* Fill padding with zeros. */
--