From 27592c3e49e458bda7d76ee26b4966dad4ccd130 Mon Sep 17 00:00:00 2001
From: Jean-Marc Valin <jmvalin@jmvalin.ca>
Date: Mon, 31 Oct 2011 13:18:43 -0400
Subject: [PATCH] Multi-stream now checks that each stream at least contains a
 ToC.

---
 src/opus_multistream.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/opus_multistream.c b/src/opus_multistream.c
index 486a2cf79..945424fa2 100644
--- a/src/opus_multistream.c
+++ b/src/opus_multistream.c
@@ -597,6 +597,7 @@ static int opus_multistream_decode_native(
    int mono_size;
    int s, i, c;
    char *ptr;
+   int do_plc=0;
    VARDECL(opus_val16, buf);
    ALLOC_STACK;
 
@@ -605,8 +606,12 @@ static int opus_multistream_decode_native(
    coupled_size = opus_decoder_get_size(2);
    mono_size = opus_decoder_get_size(1);
 
+   if (len==0)
+      do_plc = 1;
    if (len < 0)
       return OPUS_BAD_ARG;
+   if (!do_plc && len < 2*st->layout.nb_streams-1)
+      return OPUS_INVALID_PACKET;
    for (s=0;s<st->layout.nb_streams;s++)
    {
       OpusDecoder *dec;
@@ -615,7 +620,7 @@ static int opus_multistream_decode_native(
       dec = (OpusDecoder*)ptr;
       ptr += (s < st->layout.nb_coupled_streams) ? align(coupled_size) : align(mono_size);
 
-      if (len<0)
+      if (!do_plc && len<=0)
       {
          RESTORE_STACK;
          return OPUS_INVALID_PACKET;
-- 
GitLab