From 5b236756a3243b5ea71f8910bbb09f319c5e4e15 Mon Sep 17 00:00:00 2001
From: Gregory Maxwell <greg@xiph.org>
Date: Mon, 14 Feb 2011 15:27:52 -0500
Subject: [PATCH] Correct a number of uninitialized value problems when
 end!=nbEBands. Now 8khz/20ms audio can be decoded at 48kHz and vice versa
 (with the PF turned off).

---
 libcelt/bands.c       |  2 +-
 libcelt/quant_bands.c | 12 ++++++------
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/libcelt/bands.c b/libcelt/bands.c
index 1c8fe25f6..1948baea8 100644
--- a/libcelt/bands.c
+++ b/libcelt/bands.c
@@ -202,7 +202,7 @@ void denormalise_bands(const CELTMode *m, const celt_norm * restrict X, celt_sig
             x++;
          } while (++j<band_end);
       }
-      for (i=M*eBands[m->nbEBands];i<N;i++)
+      for (i=M*eBands[end];i<N;i++)
          *f++ = 0;
    } while (++c<C);
 }
diff --git a/libcelt/quant_bands.c b/libcelt/quant_bands.c
index 1de7d6722..9aa05fe2e 100644
--- a/libcelt/quant_bands.c
+++ b/libcelt/quant_bands.c
@@ -272,7 +272,7 @@ void quant_coarse_energy(const CELTMode *m, int start, int end, int effEnd,
    int badness1=0;
    SAVE_STACK;
 
-   intra = force_intra || (*delayedIntra && nbAvailableBytes > end*C);
+   intra = force_intra || (*delayedIntra && nbAvailableBytes > (end-start)*C);
    if (/*shortBlocks || */intra_decision(eBands, oldEBands, start, effEnd, m->nbEBands, C))
       *delayedIntra = 1;
    else
@@ -295,7 +295,7 @@ void quant_coarse_energy(const CELTMode *m, int start, int end, int effEnd,
 
    ALLOC(oldEBands_intra, C*m->nbEBands, celt_word16);
    ALLOC(error_intra, C*m->nbEBands, celt_word16);
-   CELT_COPY(oldEBands_intra, oldEBands, C*end);
+   CELT_COPY(oldEBands_intra, oldEBands, C*m->nbEBands);
 
    if (two_pass || intra)
    {
@@ -335,12 +335,12 @@ void quant_coarse_energy(const CELTMode *m, int start, int end, int effEnd,
          /* Copy intra bits to bit-stream */
          CELT_COPY(ec_get_buffer(&enc_intra_state) + nstart_bytes,
                intra_bits, nintra_bytes - nstart_bytes);
-         CELT_COPY(oldEBands, oldEBands_intra, C*end);
-         CELT_COPY(error, error_intra, C*end);
+         CELT_COPY(oldEBands, oldEBands_intra, C*m->nbEBands);
+         CELT_COPY(error, error_intra, C*m->nbEBands);
       }
    } else {
-      CELT_COPY(oldEBands, oldEBands_intra, C*end);
-      CELT_COPY(error, error_intra, C*end);
+      CELT_COPY(oldEBands, oldEBands_intra, C*m->nbEBands);
+      CELT_COPY(error, error_intra, C*m->nbEBands);
    }
    RESTORE_STACK;
 }
-- 
GitLab