mirror of https://github.com/mstorsjo/fdk-aac.git
Check for heightLayer out of range
Alternatively, the bits read in CProgramConfig_ReadHeightExt could be checked right there instead. Fixes: 2802/clusterfuzz-testcase-minimized-6752357788418048 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
This commit is contained in:
parent
52c2660c26
commit
ee6d9476a6
|
@ -650,6 +650,8 @@ int CProgramConfig_LookupElement(
|
||||||
/* search in front channels */
|
/* search in front channels */
|
||||||
for (i = 0; i < pPce->NumFrontChannelElements; i++) {
|
for (i = 0; i < pPce->NumFrontChannelElements; i++) {
|
||||||
int heightLayer = pPce->FrontElementHeightInfo[i];
|
int heightLayer = pPce->FrontElementHeightInfo[i];
|
||||||
|
if (heightLayer >= PC_NUM_HEIGHT_LAYER)
|
||||||
|
return 0;
|
||||||
if (isCpe == pPce->FrontElementIsCpe[i] && pPce->FrontElementTagSelect[i] == tag) {
|
if (isCpe == pPce->FrontElementIsCpe[i] && pPce->FrontElementTagSelect[i] == tag) {
|
||||||
int h, elIdx = ec[heightLayer], chIdx = cc[heightLayer];
|
int h, elIdx = ec[heightLayer], chIdx = cc[heightLayer];
|
||||||
AUDIO_CHANNEL_TYPE aChType = (AUDIO_CHANNEL_TYPE)((heightLayer<<4) | ACT_FRONT);
|
AUDIO_CHANNEL_TYPE aChType = (AUDIO_CHANNEL_TYPE)((heightLayer<<4) | ACT_FRONT);
|
||||||
|
@ -704,6 +706,8 @@ int CProgramConfig_LookupElement(
|
||||||
/* search in side channels */
|
/* search in side channels */
|
||||||
for (i = 0; i < pPce->NumSideChannelElements; i++) {
|
for (i = 0; i < pPce->NumSideChannelElements; i++) {
|
||||||
int heightLayer = pPce->SideElementHeightInfo[i];
|
int heightLayer = pPce->SideElementHeightInfo[i];
|
||||||
|
if (heightLayer >= PC_NUM_HEIGHT_LAYER)
|
||||||
|
return 0;
|
||||||
if (isCpe == pPce->SideElementIsCpe[i] && pPce->SideElementTagSelect[i] == tag) {
|
if (isCpe == pPce->SideElementIsCpe[i] && pPce->SideElementTagSelect[i] == tag) {
|
||||||
int h, elIdx = ec[heightLayer], chIdx = cc[heightLayer];
|
int h, elIdx = ec[heightLayer], chIdx = cc[heightLayer];
|
||||||
AUDIO_CHANNEL_TYPE aChType = (AUDIO_CHANNEL_TYPE)((heightLayer<<4) | ACT_SIDE);
|
AUDIO_CHANNEL_TYPE aChType = (AUDIO_CHANNEL_TYPE)((heightLayer<<4) | ACT_SIDE);
|
||||||
|
@ -758,6 +762,8 @@ int CProgramConfig_LookupElement(
|
||||||
/* search in back channels */
|
/* search in back channels */
|
||||||
for (i = 0; i < pPce->NumBackChannelElements; i++) {
|
for (i = 0; i < pPce->NumBackChannelElements; i++) {
|
||||||
int heightLayer = pPce->BackElementHeightInfo[i];
|
int heightLayer = pPce->BackElementHeightInfo[i];
|
||||||
|
if (heightLayer >= PC_NUM_HEIGHT_LAYER)
|
||||||
|
return 0;
|
||||||
if (isCpe == pPce->BackElementIsCpe[i] && pPce->BackElementTagSelect[i] == tag) {
|
if (isCpe == pPce->BackElementIsCpe[i] && pPce->BackElementTagSelect[i] == tag) {
|
||||||
int h, elIdx = ec[heightLayer], chIdx = cc[heightLayer];
|
int h, elIdx = ec[heightLayer], chIdx = cc[heightLayer];
|
||||||
AUDIO_CHANNEL_TYPE aChType = (AUDIO_CHANNEL_TYPE)((heightLayer<<4) | ACT_BACK);
|
AUDIO_CHANNEL_TYPE aChType = (AUDIO_CHANNEL_TYPE)((heightLayer<<4) | ACT_BACK);
|
||||||
|
@ -817,18 +823,24 @@ int CProgramConfig_LookupElement(
|
||||||
Start with counting the front channels/elements at normal height */
|
Start with counting the front channels/elements at normal height */
|
||||||
for (i = 0; i < pPce->NumFrontChannelElements; i+=1) {
|
for (i = 0; i < pPce->NumFrontChannelElements; i+=1) {
|
||||||
int heightLayer = pPce->FrontElementHeightInfo[i];
|
int heightLayer = pPce->FrontElementHeightInfo[i];
|
||||||
|
if (heightLayer >= PC_NUM_HEIGHT_LAYER)
|
||||||
|
return 0;
|
||||||
ec[heightLayer] += 1;
|
ec[heightLayer] += 1;
|
||||||
cc[heightLayer] += (pPce->FrontElementIsCpe[i]) ? 2 : 1;
|
cc[heightLayer] += (pPce->FrontElementIsCpe[i]) ? 2 : 1;
|
||||||
}
|
}
|
||||||
/* Count side channels/elements at normal height */
|
/* Count side channels/elements at normal height */
|
||||||
for (i = 0; i < pPce->NumSideChannelElements; i+=1) {
|
for (i = 0; i < pPce->NumSideChannelElements; i+=1) {
|
||||||
int heightLayer = pPce->SideElementHeightInfo[i];
|
int heightLayer = pPce->SideElementHeightInfo[i];
|
||||||
|
if (heightLayer >= PC_NUM_HEIGHT_LAYER)
|
||||||
|
return 0;
|
||||||
ec[heightLayer] += 1;
|
ec[heightLayer] += 1;
|
||||||
cc[heightLayer] += (pPce->SideElementIsCpe[i]) ? 2 : 1;
|
cc[heightLayer] += (pPce->SideElementIsCpe[i]) ? 2 : 1;
|
||||||
}
|
}
|
||||||
/* Count back channels/elements at normal height */
|
/* Count back channels/elements at normal height */
|
||||||
for (i = 0; i < pPce->NumBackChannelElements; i+=1) {
|
for (i = 0; i < pPce->NumBackChannelElements; i+=1) {
|
||||||
int heightLayer = pPce->BackElementHeightInfo[i];
|
int heightLayer = pPce->BackElementHeightInfo[i];
|
||||||
|
if (heightLayer >= PC_NUM_HEIGHT_LAYER)
|
||||||
|
return 0;
|
||||||
ec[heightLayer] += 1;
|
ec[heightLayer] += 1;
|
||||||
cc[heightLayer] += (pPce->BackElementIsCpe[i]) ? 2 : 1;
|
cc[heightLayer] += (pPce->BackElementIsCpe[i]) ? 2 : 1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue