diff options
Diffstat (limited to 'media/libstagefright/codecs/amrwbenc/src/deemph.c')
-rw-r--r-- | media/libstagefright/codecs/amrwbenc/src/deemph.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/media/libstagefright/codecs/amrwbenc/src/deemph.c b/media/libstagefright/codecs/amrwbenc/src/deemph.c index 0c49d6b..5eae6a7 100644 --- a/media/libstagefright/codecs/amrwbenc/src/deemph.c +++ b/media/libstagefright/codecs/amrwbenc/src/deemph.c @@ -68,8 +68,19 @@ void Deemph2( x[0] = (L_tmp + 0x8000)>>16; for (i = 1; i < L; i++) { + Word32 tmp; L_tmp = x[i] << 15; - L_tmp += (x[i - 1] * mu)<<1; + tmp = (x[i - 1] * mu)<<1; + if (tmp > 0 && L_tmp > INT_MAX - tmp) { + L_tmp = INT_MAX; + } else if (tmp < 0 && L_tmp < INT_MIN - tmp) { + L_tmp = INT_MIN; + } else { + L_tmp += tmp; + } + if (L_tmp > INT32_MAX - 0x8000) { + L_tmp = INT_MAX - 0x8000; + } x[i] = (L_tmp + 0x8000)>>16; } *mem = x[L - 1]; |