summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/codecs/amrwbenc/inc/basic_op.h
diff options
context:
space:
mode:
authorMarco Nelissen <marcone@google.com>2016-01-27 14:41:58 -0800
committerSteve Kondik <steve@cyngn.com>2016-03-22 17:14:35 -0700
commit4b17bd19e9eceade55dd27aea10b2cefa4e929c7 (patch)
tree41e4982162c2c3557a41228eeae42354a060df9f /media/libstagefright/codecs/amrwbenc/inc/basic_op.h
parentd7a4d6dcb9a82eb5daad7ab897a1be5357ce19c3 (diff)
downloadframeworks_av-4b17bd19e9eceade55dd27aea10b2cefa4e929c7.zip
frameworks_av-4b17bd19e9eceade55dd27aea10b2cefa4e929c7.tar.gz
frameworks_av-4b17bd19e9eceade55dd27aea10b2cefa4e929c7.tar.bz2
Overflow fixes for amrwbenc
Most of these were encountered while running a mixed sanitized/unsanitized AMR encoder, so may not be reachable in real conditions. Change-Id: I85af7d40214133234009323e7e64432fc1be39ca
Diffstat (limited to 'media/libstagefright/codecs/amrwbenc/inc/basic_op.h')
-rw-r--r--media/libstagefright/codecs/amrwbenc/inc/basic_op.h10
1 files changed, 7 insertions, 3 deletions
diff --git a/media/libstagefright/codecs/amrwbenc/inc/basic_op.h b/media/libstagefright/codecs/amrwbenc/inc/basic_op.h
index e63a55a..d36f455 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/basic_op.h
+++ b/media/libstagefright/codecs/amrwbenc/inc/basic_op.h
@@ -222,14 +222,18 @@ static_vo Word16 shl (Word16 var1, Word16 var2)
}
else
{
- result = (Word32) var1 *((Word32) 1 << var2);
- if ((var2 > 15 && var1 != 0) || (result != (Word32) ((Word16) result)))
+ if (var2 > 15 && var1 != 0)
{
var_out = (Word16)((var1 > 0) ? MAX_16 : MIN_16);
}
else
{
- var_out = extract_l (result);
+ result = (Word32) var1 *((Word32) 1 << var2);
+ if ((result != (Word32) ((Word16) result))) {
+ var_out = (Word16)((var1 > 0) ? MAX_16 : MIN_16);
+ } else {
+ var_out = extract_l (result);
+ }
}
}
return (var_out);