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;
--
⑨