aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2019-10-19 21:27:41 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2019-12-01 17:45:46 +0100
commit650ce5047cf3e8286e6fbca8cdf14b1bb885bcb1 (patch)
tree30b710d65f1b6c5c3b857e5a0b2dbf3a6ca4a5ca
parente2def5f382b03eeec8ec3662daed4381d9c95b92 (diff)
downloadffmpeg-650ce5047cf3e8286e6fbca8cdf14b1bb885bcb1.tar.gz
avutil/lfg: Correct index increment type to avoid undefined behavior
Fixes: signed integer overflow: 2147483647 + 1 cannot be represented in type 'int' Fixes: 18333/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_COMFORTNOISE_fuzzer-5668481831272448 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> (cherry picked from commit 6014bcf1b74e903f535461ade4aa5fb44dbf5d8b) Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r--libavutil/lfg.h9
1 files changed, 6 insertions, 3 deletions
diff --git a/libavutil/lfg.h b/libavutil/lfg.h
index ab38a8a0df..2b669205d1 100644
--- a/libavutil/lfg.h
+++ b/libavutil/lfg.h
@@ -51,8 +51,9 @@ int av_lfg_init_from_data(AVLFG *c, const uint8_t *data, unsigned int length);
* it may be good enough and faster for your specific use case.
*/
static inline unsigned int av_lfg_get(AVLFG *c){
- c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63];
- return c->state[c->index++ & 63];
+ unsigned a = c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63];
+ c->index += 1U;
+ return a;
}
/**
@@ -63,7 +64,9 @@ static inline unsigned int av_lfg_get(AVLFG *c){
static inline unsigned int av_mlfg_get(AVLFG *c){
unsigned int a= c->state[(c->index-55) & 63];
unsigned int b= c->state[(c->index-24) & 63];
- return c->state[c->index++ & 63] = 2*a*b+a+b;
+ a = c->state[c->index & 63] = 2*a*b+a+b;
+ c->index += 1U;
+ return a;
}
/**