diff options
| author | Android Build Merger (Role) <noreply-android-build-merger@google.com> | 2018-01-31 19:48:34 +0000 | 
|---|---|---|
| committer | Android Build Merger (Role) <noreply-android-build-merger@google.com> | 2018-01-31 19:48:34 +0000 | 
| commit | b2d0afac05cc53aab6871e19bbefa17d832e2cb9 (patch) | |
| tree | cf28ae96c1185754a8b64414852e5a84a3a1d1db | |
| parent | 75fe8cb95ef40bd9599bc562a69cc32ad837ad8e (diff) | |
| parent | 4523eae489b2605c948c12d0e1fe7f7722a26139 (diff) | |
| download | fdk-aac-b2d0afac05cc53aab6871e19bbefa17d832e2cb9.tar.gz fdk-aac-b2d0afac05cc53aab6871e19bbefa17d832e2cb9.tar.bz2 fdk-aac-b2d0afac05cc53aab6871e19bbefa17d832e2cb9.zip | |
[automerger] DO NOT MERGE MPEG-4 AAC Decoder: check against invalid height info am: 4a54666f3e am: adc8026945 am: 6dd431c768 am: 4523eae489
Change-Id: I14943f95747e93f1e85cf560fe63fa11b168c9e3
| -rw-r--r-- | libMpegTPDec/src/tpdec_asc.cpp | 23 | 
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 */ | 
