diff options
author | Fraunhofer IIS FDK <audio-fdk@iis.fraunhofer.de> | 2019-11-13 16:09:45 +0100 |
---|---|---|
committer | Jean-Michel Trivi <jmtrivi@google.com> | 2020-01-22 11:59:08 -0800 |
commit | e323bf6cabad6cafd31fc77c4d8c14bb48ea71e1 (patch) | |
tree | cabf9349a55b8c748dc5771863b01feab219f7bd /libFDK | |
parent | cee316ab3ebde92047b5e76d15c00768b92cb890 (diff) | |
download | fdk-aac-e323bf6cabad6cafd31fc77c4d8c14bb48ea71e1.tar.gz fdk-aac-e323bf6cabad6cafd31fc77c4d8c14bb48ea71e1.tar.bz2 fdk-aac-e323bf6cabad6cafd31fc77c4d8c14bb48ea71e1.zip |
Avoid undefined shift exponent in f2Pow().
Bug: 146938418
Test: atest DecoderTestXheAac ; atest DecoderTestAacDrc
Change-Id: Id28608e049244968158900848c23bf7a8298083d
Diffstat (limited to 'libFDK')
-rw-r--r-- | libFDK/include/fixpoint_math.h | 2 | ||||
-rw-r--r-- | libFDK/src/fixpoint_math.cpp | 8 |
2 files changed, 8 insertions, 2 deletions
diff --git a/libFDK/include/fixpoint_math.h b/libFDK/include/fixpoint_math.h index 373eec1..51df4d7 100644 --- a/libFDK/include/fixpoint_math.h +++ b/libFDK/include/fixpoint_math.h @@ -775,7 +775,7 @@ FIXP_DBL fPow(FIXP_DBL base_m, INT base_e, FIXP_DBL exp_m, INT exp_e, /** * \brief return (base_m * 2^base_e) ^ N - * \param base_m mantissa of the base + * \param base_m mantissa of the base. Must not be negative. * \param base_e exponent of the base * \param N power to be calculated of the base * \param result_e pointer to a INT where the exponent of the result will be diff --git a/libFDK/src/fixpoint_math.cpp b/libFDK/src/fixpoint_math.cpp index 6c656fa..1e26420 100644 --- a/libFDK/src/fixpoint_math.cpp +++ b/libFDK/src/fixpoint_math.cpp @@ -1,7 +1,7 @@ /* ----------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2018 Fraunhofer-Gesellschaft zur Förderung der angewandten +© Copyright 1995 - 2020 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -650,6 +650,12 @@ FIXP_DBL fPow(FIXP_DBL base_m, INT base_e, FIXP_DBL exp_m, INT exp_e, INT ans_lg2_e, baselg2_e; FIXP_DBL base_lg2, ans_lg2, result; + if (base_m <= (FIXP_DBL)0) { + result = (FIXP_DBL)0; + *result_e = 0; + return result; + } + /* Calc log2 of base */ base_lg2 = fLog2(base_m, base_e, &baselg2_e); |