1
0
mirror of https://github.com/mstorsjo/fdk-aac.git synced 2025-02-16 19:30:34 +01:00

Unsigned Integer Overflow in transportDec_readHeader().

Bug: 112662270
Test: atest DecoderTestXheAac ; atest DecoderTestAacDrc
Change-Id: I0beedab38175fc57e5bd9eb5700a3850ef2bebf7
This commit is contained in:
Fraunhofer IIS FDK 2018-06-08 18:18:14 +02:00 committed by Jean-Michel Trivi
parent c75797cfaa
commit 81933bc6eb

View File

@ -871,7 +871,7 @@ static TRANSPORTDEC_ERROR transportDec_readHeader(
int fConfigFound = (pfConfigFound != NULL) ? *pfConfigFound : 0; int fConfigFound = (pfConfigFound != NULL) ? *pfConfigFound : 0;
int startPos; int startPos;
startPos = FDKgetValidBits(hBs); startPos = (INT)FDKgetValidBits(hBs);
switch (hTp->transportFmt) { switch (hTp->transportFmt) {
case TT_MP4_ADTS: case TT_MP4_ADTS:
@ -941,7 +941,7 @@ static TRANSPORTDEC_ERROR transportDec_readHeader(
fTraverseMoreFrames = 0; fTraverseMoreFrames = 0;
} }
syncLayerFrameBits = (hTp->parser.adts.bs.frame_length << 3) - syncLayerFrameBits = (hTp->parser.adts.bs.frame_length << 3) -
((INT)startPos - (INT)FDKgetValidBits(hBs)) - (startPos - (INT)FDKgetValidBits(hBs)) -
syncLength; syncLength;
if (syncLayerFrameBits <= 0) { if (syncLayerFrameBits <= 0) {
err = TRANSPORTDEC_SYNC_ERROR; err = TRANSPORTDEC_SYNC_ERROR;
@ -952,7 +952,7 @@ static TRANSPORTDEC_ERROR transportDec_readHeader(
break; break;
case TT_MP4_LOAS: case TT_MP4_LOAS:
if (hTp->numberOfRawDataBlocks <= 0) { if (hTp->numberOfRawDataBlocks <= 0) {
syncLayerFrameBits = FDKreadBits(hBs, 13); syncLayerFrameBits = (INT)FDKreadBits(hBs, 13);
hTp->parser.latm.m_audioMuxLengthBytes = syncLayerFrameBits; hTp->parser.latm.m_audioMuxLengthBytes = syncLayerFrameBits;
syncLayerFrameBits <<= 3; syncLayerFrameBits <<= 3;
} }
@ -974,7 +974,7 @@ static TRANSPORTDEC_ERROR transportDec_readHeader(
hTp->numberOfRawDataBlocks = hTp->numberOfRawDataBlocks =
CLatmDemux_GetNrOfSubFrames(&hTp->parser.latm); CLatmDemux_GetNrOfSubFrames(&hTp->parser.latm);
if (hTp->transportFmt == TT_MP4_LOAS) { if (hTp->transportFmt == TT_MP4_LOAS) {
syncLayerFrameBits -= startPos - FDKgetValidBits(hBs) - (13); syncLayerFrameBits -= startPos - (INT)FDKgetValidBits(hBs) - (13);
} }
} }
} else { } else {