summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/codecs/amrwbenc/src/c4t64fx.c
diff options
context:
space:
mode:
authorMarco Nelissen <marcone@google.com>2015-12-08 12:39:45 -0800
committerSteve Kondik <shade@chemlab.org>2015-12-26 03:56:55 -0800
commitefa19aba6cdc191237c9e9b123714bba8151c591 (patch)
tree2dd3c7daf69b9324122f05cd3aa3ebf5ad159919 /media/libstagefright/codecs/amrwbenc/src/c4t64fx.c
parent54cdb1f0ce7d03a75499d5ae258fd278de27462d (diff)
downloadframeworks_av-efa19aba6cdc191237c9e9b123714bba8151c591.zip
frameworks_av-efa19aba6cdc191237c9e9b123714bba8151c591.tar.gz
frameworks_av-efa19aba6cdc191237c9e9b123714bba8151c591.tar.bz2
Fix overflows in amrwbenc
Revert 3cdaed88daeeebfe05e7913837f41c2d92f411cc and 883ff4f4c41ae9bf84d1912ab054fe38f7505dd0, and fix the overflows that should have been clamped instead of allowed to overflow. Bug: 25843966 Bug: 23752600 Change-Id: I9af1726d058eb8eeaa80fa8df74fe0a3759486c1
Diffstat (limited to 'media/libstagefright/codecs/amrwbenc/src/c4t64fx.c')
-rw-r--r--media/libstagefright/codecs/amrwbenc/src/c4t64fx.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/media/libstagefright/codecs/amrwbenc/src/c4t64fx.c b/media/libstagefright/codecs/amrwbenc/src/c4t64fx.c
index 1ecc11f..6505e5d 100644
--- a/media/libstagefright/codecs/amrwbenc/src/c4t64fx.c
+++ b/media/libstagefright/codecs/amrwbenc/src/c4t64fx.c
@@ -628,8 +628,16 @@ void ACELP_4t64_fx(
L_tmp = 0L;
for(i = 0; i < L_SUBFR; i++)
{
+ Word32 vecSq2;
vec[i] = add1(add1(add1(*p0++, *p1++), *p2++), *p3++);
- L_tmp += (vec[i] * vec[i]) << 1;
+ vecSq2 = (vec[i] * vec[i]) << 1;
+ if (vecSq2 > 0 && L_tmp > INT_MAX - vecSq2) {
+ L_tmp = INT_MAX;
+ } else if (vecSq2 < 0 && L_tmp < INT_MIN - vecSq2) {
+ L_tmp = INT_MIN;
+ } else {
+ L_tmp += vecSq2;
+ }
}
alp = ((L_tmp >> 3) + 0x8000) >> 16;