Fix decoder handling of floor0 when the LSP order is 1.
authorTim Terriberry <tterribe@xiph.org>
Fri, 15 Oct 2010 02:52:29 +0000 (02:52 +0000)
committerTim Terriberry <tterribe@xiph.org>
Fri, 15 Oct 2010 02:52:29 +0000 (02:52 +0000)
Header setup allows the LSP order to be as low as one, but the code in
 vorbis_lsp_to_curve() assumed it was at least two.
This wasn't terrible in libvorbis... it would multiply a nonsense (but defined)
 value into the output, and nothing more.
In Tremor, it referenced several completely undefined (stack) values, which
 could cause out-of-bounds lookup table accesses and crashes.

svn path=/trunk/vorbis/; revision=17538

lib/lsp.c

index 4871dab..d60fabf 100644 (file)
--- a/lib/lsp.c
+++ b/lib/lsp.c
@@ -81,11 +81,11 @@ void vorbis_lsp_to_curve(float *curve,int *map,int n,int ln,float *lsp,int m,
     float *ftmp=lsp;
     int c=m>>1;
 
-    do{
+    while(c--){
       q*=ftmp[0]-w;
       p*=ftmp[1]-w;
       ftmp+=2;
-    }while(--c);
+    }
 
     if(m&1){
       /* odd order filter; slightly assymetric */