Skip to content

Commit 9c3da1a

Browse files
committed
Reapply: Avoid reading out of bounds due to too large aaIidIndexMapped
Fixes: 10726/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_LIBFDK_AAC_fuzzer-5167035365982208 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
1 parent 53fc32f commit 9c3da1a

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

libSBRdec/src/psdec.cpp

+10-5
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ void initSlotBasedRotation(
325325
int env, int usb) {
326326
INT group = 0;
327327
INT bin = 0;
328-
INT noIidSteps;
328+
INT noIidSteps, noFactors;
329329

330330
FIXP_SGL invL;
331331
FIXP_DBL ScaleL, ScaleR;
@@ -337,9 +337,11 @@ void initSlotBasedRotation(
337337
if (h_ps_d->bsData[h_ps_d->processSlot].mpeg.bFineIidQ) {
338338
PScaleFactors = ScaleFactorsFine; /* values are shiftet right by one */
339339
noIidSteps = NO_IID_STEPS_FINE;
340+
noFactors = NO_IID_LEVELS_FINE;
340341
} else {
341342
PScaleFactors = ScaleFactors; /* values are shiftet right by one */
342343
noIidSteps = NO_IID_STEPS;
344+
noFactors = NO_IID_LEVELS;
343345
}
344346

345347
/* dequantize and decode */
@@ -358,10 +360,13 @@ void initSlotBasedRotation(
358360

359361
/* ScaleR and ScaleL are scaled by 1 shift right */
360362

361-
ScaleR = PScaleFactors[noIidSteps + h_ps_d->specificTo.mpeg.pCoef
362-
->aaIidIndexMapped[env][bin]];
363-
ScaleL = PScaleFactors[noIidSteps - h_ps_d->specificTo.mpeg.pCoef
364-
->aaIidIndexMapped[env][bin]];
363+
ScaleL = ScaleR = 0;
364+
if (noIidSteps + h_ps_d->specificTo.mpeg.pCoef->aaIidIndexMapped[env][bin] >= 0 && noIidSteps + h_ps_d->specificTo.mpeg.pCoef->aaIidIndexMapped[env][bin] < noFactors)
365+
ScaleR = PScaleFactors[noIidSteps + h_ps_d->specificTo.mpeg.pCoef
366+
->aaIidIndexMapped[env][bin]];
367+
if (noIidSteps - h_ps_d->specificTo.mpeg.pCoef->aaIidIndexMapped[env][bin] >= 0 && noIidSteps - h_ps_d->specificTo.mpeg.pCoef->aaIidIndexMapped[env][bin] < noFactors)
368+
ScaleL = PScaleFactors[noIidSteps - h_ps_d->specificTo.mpeg.pCoef
369+
->aaIidIndexMapped[env][bin]];
365370

366371
AlphasValue = 0;
367372
if (h_ps_d->specificTo.mpeg.pCoef->aaIccIndexMapped[env][bin] >= 0)

0 commit comments

Comments
 (0)