diff wmadec.c @ 10561:d0e17b0a6845 libavcodec

WMA: extend exponent table up to 75 Fixes issue 1565.
author mru
date Mon, 23 Nov 2009 22:22:16 +0000
parents 88e1eb862abd
children 559ba9eabaff
line wrap: on
line diff
--- a/wmadec.c	Mon Nov 23 19:45:40 2009 +0000
+++ b/wmadec.c	Mon Nov 23 22:22:16 2009 +0000
@@ -240,8 +240,8 @@
                      s->block_len, lsp_coefs);
 }
 
-/** pow(10, i / 16.0) for i in -60..67 */
-static const float pow_tab[128] = {
+/** pow(10, i / 16.0) for i in -60..75 */
+static const float pow_tab[] = {
     1.7782794100389e-04, 2.0535250264571e-04,
     2.3713737056617e-04, 2.7384196342644e-04,
     3.1622776601684e-04, 3.6517412725484e-04,
@@ -306,6 +306,10 @@
     7.4989420933246e+03, 8.6596432336007e+03,
     1.0000000000000e+04, 1.1547819846895e+04,
     1.3335214321633e+04, 1.5399265260595e+04,
+    1.7782794100389e+04, 2.0535250264571e+04,
+    2.3713737056617e+04, 2.7384196342644e+04,
+    3.1622776601684e+04, 3.6517412725484e+04,
+    4.2169650342858e+04, 4.8696752516586e+04,
 };
 
 /**
@@ -345,8 +349,11 @@
             return -1;
         /* NOTE: this offset is the same as MPEG4 AAC ! */
         last_exp += code - 60;
-        if ((unsigned)last_exp + 60 > FF_ARRAY_ELEMS(pow_tab))
+        if ((unsigned)last_exp + 60 > FF_ARRAY_ELEMS(pow_tab)) {
+            av_log(s->avctx, AV_LOG_ERROR, "Exponent out of range: %d\n",
+                   last_exp);
             return -1;
+        }
         v = ptab[last_exp];
         iv = iptab[last_exp];
         if (v > max_scale)