summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorThomas Daede <daede003@umn.edu>2018-05-14 15:45:00 -0700
committerThomas Daede <daede003@umn.edu>2018-05-17 15:59:41 -0700
commit89f651faa20731cd5315e41e8920a32ebf8b87ff (patch)
tree77096d2b3f9085388ce9ee52a31d53630250885f /lib
parent018ca26dece618457dd13585cad52941193c4a25 (diff)
downloadlibvorbis-git-89f651faa20731cd5315e41e8920a32ebf8b87ff.tar.gz
Clamp large exponents in float32_unpack.
Diffstat (limited to 'lib')
-rw-r--r--lib/sharedbook.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/lib/sharedbook.c b/lib/sharedbook.c
index 4545d4f4..8d73daa8 100644
--- a/lib/sharedbook.c
+++ b/lib/sharedbook.c
@@ -62,7 +62,15 @@ float _float32_unpack(long val){
int sign=val&0x80000000;
long exp =(val&0x7fe00000L)>>VQ_FMAN;
if(sign)mant= -mant;
- return(ldexp(mant,exp-(VQ_FMAN-1)-VQ_FEXP_BIAS));
+ exp=exp-(VQ_FMAN-1)-VQ_FEXP_BIAS;
+ /* clamp excessive exponent values */
+ if (exp>63){
+ exp=63;
+ }
+ if (exp<-63){
+ exp-63;
+ }
+ return(ldexp(mant,exp));
}
/* given a list of word lengths, generate a list of codewords. Works