aboutsummaryrefslogtreecommitdiffstats
path: root/libMpegTPDec
diff options
context:
space:
mode:
authorAndroid Build Merger (Role) <noreply-android-build-merger@google.com>2018-01-31 19:48:31 +0000
committerAndroid Build Merger (Role) <noreply-android-build-merger@google.com>2018-01-31 19:48:31 +0000
commit6dd431c768db93c29ebaf8b3cea36e7533dcb08c (patch)
treecf28ae96c1185754a8b64414852e5a84a3a1d1db /libMpegTPDec
parentc0719825a23ff92b6bc1e6618542eada7f9fe6cd (diff)
parentadc8026945d797d0c5cf3708fca635ad61c87c32 (diff)
downloadfdk-aac-6dd431c768db93c29ebaf8b3cea36e7533dcb08c.tar.gz
fdk-aac-6dd431c768db93c29ebaf8b3cea36e7533dcb08c.tar.bz2
fdk-aac-6dd431c768db93c29ebaf8b3cea36e7533dcb08c.zip
[automerger] DO NOT MERGE MPEG-4 AAC Decoder: check against invalid height info am: 4a54666f3e am: adc8026945
Change-Id: I9d3b87e62af0f54c01ced2e3aac41fa8e96cb056
Diffstat (limited to 'libMpegTPDec')
-rw-r--r--libMpegTPDec/src/tpdec_asc.cpp23
1 files changed, 19 insertions, 4 deletions
diff --git a/libMpegTPDec/src/tpdec_asc.cpp b/libMpegTPDec/src/tpdec_asc.cpp
index bae271e..e697b48 100644
--- a/libMpegTPDec/src/tpdec_asc.cpp
+++ b/libMpegTPDec/src/tpdec_asc.cpp
@@ -118,7 +118,9 @@ int CProgramConfig_IsValid ( const CProgramConfig *pPce )
/*
* Read the extension for height info.
- * return 0 if successfull or -1 if the CRC failed.
+ * return 0 if successfull,
+ * -1 if the CRC failed,
+ * -2 if invalid HeightInfo.
*/
static
int CProgramConfig_ReadHeightExt(
@@ -146,15 +148,21 @@ int CProgramConfig_ReadHeightExt(
for (i=0; i < pPce->NumFrontChannelElements; i++)
{
- pPce->FrontElementHeightInfo[i] = (UCHAR) FDKreadBits(bs,2);
+ if ((pPce->FrontElementHeightInfo[i] = (UCHAR) FDKreadBits(bs,2)) >= PC_NUM_HEIGHT_LAYER) {
+ err = -2; /* height information is out of the valid range */
+ }
}
for (i=0; i < pPce->NumSideChannelElements; i++)
{
- pPce->SideElementHeightInfo[i] = (UCHAR) FDKreadBits(bs,2);
+ if ((pPce->SideElementHeightInfo[i] = (UCHAR) FDKreadBits(bs,2)) >= PC_NUM_HEIGHT_LAYER) {
+ err = -2; /* height information is out of the valid range */
+ }
}
for (i=0; i < pPce->NumBackChannelElements; i++)
{
- pPce->BackElementHeightInfo[i] = (UCHAR) FDKreadBits(bs,2);
+ if ((pPce->BackElementHeightInfo[i] = (UCHAR) FDKreadBits(bs,2)) >= PC_NUM_HEIGHT_LAYER) {
+ err = -2; /* height information is out of the valid range */
+ }
}
FDKbyteAlign(bs, alignmentAnchor);
@@ -163,6 +171,13 @@ int CProgramConfig_ReadHeightExt(
/* CRC failed */
err = -1;
}
+ if (err!=0) {
+ /* Reset whole height information in case an error occured during parsing. The return
+ value ensures that pPce->isValid is set to 0 and implicit channel mapping is used. */
+ FDKmemclear(pPce->FrontElementHeightInfo, sizeof(pPce->FrontElementHeightInfo));
+ FDKmemclear(pPce->SideElementHeightInfo, sizeof(pPce->SideElementHeightInfo));
+ FDKmemclear(pPce->BackElementHeightInfo, sizeof(pPce->BackElementHeightInfo));
+ }
}
else {
/* No valid extension data found -> restore the initial bitbuffer state */