diff options
author | Thomas Daede <daede003@umn.edu> | 2018-05-14 15:45:00 -0700 |
---|---|---|
committer | Thomas Daede <daede003@umn.edu> | 2018-05-17 15:59:41 -0700 |
commit | 89f651faa20731cd5315e41e8920a32ebf8b87ff (patch) | |
tree | 77096d2b3f9085388ce9ee52a31d53630250885f /lib | |
parent | 018ca26dece618457dd13585cad52941193c4a25 (diff) | |
download | libvorbis-git-89f651faa20731cd5315e41e8920a32ebf8b87ff.tar.gz |
Clamp large exponents in float32_unpack.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/sharedbook.c | 10 |
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 |