summaryrefslogtreecommitdiff
path: root/libavcodec/qdm2.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2019-06-24 01:01:02 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2019-07-08 09:41:47 +0200
commitae021c1239ec3bc0a30dc5a4720569071599ece4 (patch)
tree05eb5fb37d1718880cb9d847cf9fa14285d02014 /libavcodec/qdm2.c
parent85cbd042ff801b4c4e13fca637d2dd25b7a312ff (diff)
avcodec/qdm2: Do not read out of array in fix_coding_method_array()
Instead we ask for a sample, its unclear what to do in this case. Fixes: index 30 out of bounds for type 'int8_t [30][64]' Fixes: 15339/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_QDM2_fuzzer-5749441484554240 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavcodec/qdm2.c')
-rw-r--r--libavcodec/qdm2.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/libavcodec/qdm2.c b/libavcodec/qdm2.c
index 1397218bdd..44ff4fa6c6 100644
--- a/libavcodec/qdm2.c
+++ b/libavcodec/qdm2.c
@@ -408,7 +408,12 @@ static int fix_coding_method_array(int sb, int channels,
}
for (k = 0; k < run; k++) {
if (j + k < 128) {
- if (coding_method[ch][sb + (j + k) / 64][(j + k) % 64] > coding_method[ch][sb][j]) {
+ int sbjk = sb + (j + k) / 64;
+ if (sbjk > 29) {
+ SAMPLES_NEEDED
+ continue;
+ }
+ if (coding_method[ch][sbjk][(j + k) % 64] > coding_method[ch][sb][j]) {
if (k > 0) {
SAMPLES_NEEDED
//not debugged, almost never used