shithub: opus

Download patch

ref: 7070dfec4f473f54d588827871fe386cbd06470a
parent: 17922c2a28ea97b2e90e1493123facb0d26c46b5
author: Jean-Marc Valin <jmvalin@jmvalin.ca>
date: Tue Feb 6 14:48:29 EST 2024

Make opus_packet_unpad() discard extensions too

Same for opus_multistream_packet_unpad()

--- a/src/repacketizer.c
+++ b/src/repacketizer.c
@@ -357,6 +357,7 @@
 {
    OpusRepacketizer rp;
    opus_int32 ret;
+   int i;
    if (len < 1)
       return OPUS_BAD_ARG;
    opus_repacketizer_init(&rp);
@@ -363,6 +364,11 @@
    ret = opus_repacketizer_cat(&rp, data, len);
    if (ret < 0)
       return ret;
+   /* Discard all padding and extensions. */
+   for (i=0;i<rp.nb_frames;i++) {
+      rp.padding_len[i] = 0;
+      rp.paddings[i] = NULL;
+   }
    ret = opus_repacketizer_out_range_impl(&rp, 0, rp.nb_frames, data, len, 0, 0, NULL, 0);
    celt_assert(ret > 0 && ret <= len);
    return ret;
@@ -417,6 +423,7 @@
    for (s=0;s<nb_streams;s++)
    {
       opus_int32 ret;
+      int i;
       int self_delimited = s!=nb_streams-1;
       if (len<=0)
          return OPUS_INVALID_PACKET;
@@ -428,6 +435,11 @@
       ret = opus_repacketizer_cat_impl(&rp, data, packet_offset, self_delimited);
       if (ret < 0)
          return ret;
+      /* Discard all padding and extensions. */
+      for (i=0;i<rp.nb_frames;i++) {
+         rp.padding_len[i] = 0;
+         rp.paddings[i] = NULL;
+      }
       ret = opus_repacketizer_out_range_impl(&rp, 0, rp.nb_frames, dst, len, self_delimited, 0, NULL, 0);
       if (ret < 0)
          return ret;
--