FDK patches: fix overflows in decoder out-of-band config
am: 44ac411683

Change-Id: I8b82f2a074eac9906d6e7badaf1cbb449ad13bdf
diff --git a/libAACdec/src/aacdecoder.cpp b/libAACdec/src/aacdecoder.cpp
index 64adb56..3cbdffd 100644
--- a/libAACdec/src/aacdecoder.cpp
+++ b/libAACdec/src/aacdecoder.cpp
@@ -437,7 +437,8 @@
                                                  UCHAR *elementInstanceTag,
                                                  UINT alignmentAnchor) {
   AAC_DECODER_ERROR error = AAC_DEC_OK;
-  UINT dataStart, dseBits;
+  UINT dseBits;
+  INT dataStart;
   int dataByteAlignFlag, count;
 
   FDK_ASSERT(self != NULL);
@@ -460,14 +461,14 @@
     FDKbyteAlign(bs, alignmentAnchor);
   }
 
-  dataStart = FDKgetValidBits(bs);
+  dataStart = (INT)FDKgetValidBits(bs);
 
   error = CAacDecoder_AncDataParse(&self->ancData, bs, count);
   transportDec_CrcEndReg(self->hInput, crcReg);
 
   {
     /* Move to the beginning of the data chunk */
-    FDKpushBack(bs, dataStart - FDKgetValidBits(bs));
+    FDKpushBack(bs, dataStart - (INT)FDKgetValidBits(bs));
 
     /* Read Anc data if available */
     aacDecoder_drcMarkPayload(self->hDrcInfo, bs, DVB_DRC_ANC_DATA);
@@ -477,7 +478,7 @@
     PCMDMX_ERROR dmxErr = PCMDMX_OK;
 
     /* Move to the beginning of the data chunk */
-    FDKpushBack(bs, dataStart - FDKgetValidBits(bs));
+    FDKpushBack(bs, dataStart - (INT)FDKgetValidBits(bs));
 
     /* Read DMX meta-data */
     dmxErr = pcmDmx_Parse(self->hPcmUtils, bs, dseBits, 0 /* not mpeg2 */);
@@ -487,8 +488,7 @@
   }
 
   /* Move to the very end of the element. */
-  FDKpushBiDirectional(
-      bs, (INT)FDKgetValidBits(bs) - (INT)dataStart + (INT)dseBits);
+  FDKpushBiDirectional(bs, (INT)FDKgetValidBits(bs) - dataStart + (INT)dseBits);
 
   return error;
 }
diff --git a/libDRCdec/src/drcDec_reader.cpp b/libDRCdec/src/drcDec_reader.cpp
index db5fab7..6fe7a04 100644
--- a/libDRCdec/src/drcDec_reader.cpp
+++ b/libDRCdec/src/drcDec_reader.cpp
@@ -1622,7 +1622,7 @@
     HANDLE_FDK_BITSTREAM hBs, HANDLE_UNI_DRC_CONFIG hUniDrcConfig) {
   DRC_ERROR err = DE_OK;
   int k, bitSizeLen, extSizeBits, bitSize;
-  UINT nBitsRemaining;
+  INT nBitsRemaining;
   UNI_DRC_CONFIG_EXTENSION* pExt = &(hUniDrcConfig->uniDrcConfigExt);
 
   k = 0;
@@ -1634,13 +1634,14 @@
 
     bitSize = FDKreadBits(hBs, extSizeBits);
     pExt->extBitSize[k] = bitSize + 1;
-    nBitsRemaining = FDKgetValidBits(hBs);
+    nBitsRemaining = (INT)FDKgetValidBits(hBs);
 
     switch (pExt->uniDrcConfigExtType[k]) {
       case UNIDRCCONFEXT_V1:
         err = _readDrcExtensionV1(hBs, hUniDrcConfig);
         if (err) return err;
-        if (nBitsRemaining != (pExt->extBitSize[k] + FDKgetValidBits(hBs)))
+        if (nBitsRemaining !=
+            ((INT)pExt->extBitSize[k] + (INT)FDKgetValidBits(hBs)))
           return DE_NOT_OK;
         break;
       case UNIDRCCONFEXT_PARAM_DRC:
@@ -1940,7 +1941,7 @@
     HANDLE_FDK_BITSTREAM hBs, HANDLE_LOUDNESS_INFO_SET hLoudnessInfoSet) {
   DRC_ERROR err = DE_OK;
   int k, bitSizeLen, extSizeBits, bitSize;
-  UINT nBitsRemaining;
+  INT nBitsRemaining;
   LOUDNESS_INFO_SET_EXTENSION* pExt = &(hLoudnessInfoSet->loudnessInfoSetExt);
 
   k = 0;
@@ -1952,13 +1953,14 @@
 
     bitSize = FDKreadBits(hBs, extSizeBits);
     pExt->extBitSize[k] = bitSize + 1;
-    nBitsRemaining = FDKgetValidBits(hBs);
+    nBitsRemaining = (INT)FDKgetValidBits(hBs);
 
     switch (pExt->loudnessInfoSetExtType[k]) {
       case UNIDRCLOUDEXT_EQ:
         err = _readLoudnessInfoSetExtEq(hBs, hLoudnessInfoSet);
         if (err) return err;
-        if (nBitsRemaining != (pExt->extBitSize[k] + FDKgetValidBits(hBs)))
+        if (nBitsRemaining !=
+            ((INT)pExt->extBitSize[k] + (INT)FDKgetValidBits(hBs)))
           return DE_NOT_OK;
         break;
       /* add future extensions here */
diff --git a/libFDK/include/FDK_crc.h b/libFDK/include/FDK_crc.h
index 17439ab..6c7040c 100644
--- a/libFDK/include/FDK_crc.h
+++ b/libFDK/include/FDK_crc.h
@@ -115,8 +115,8 @@
 typedef struct {
   UCHAR isActive;
   INT maxBits;
-  UINT bitBufCntBits;
-  UINT validBits;
+  INT bitBufCntBits;
+  INT validBits;
 
 } CCrcRegData;
 
diff --git a/libFDK/src/FDK_crc.cpp b/libFDK/src/FDK_crc.cpp
index 39f87d3..e208338 100644
--- a/libFDK/src/FDK_crc.cpp
+++ b/libFDK/src/FDK_crc.cpp
@@ -281,7 +281,7 @@
   FDK_ASSERT(hCrcInfo->crcRegData[reg].isActive == 0);
   hCrcInfo->crcRegData[reg].isActive = 1;
   hCrcInfo->crcRegData[reg].maxBits = mBits;
-  hCrcInfo->crcRegData[reg].validBits = FDKgetValidBits(hBs);
+  hCrcInfo->crcRegData[reg].validBits = (INT)FDKgetValidBits(hBs);
   hCrcInfo->crcRegData[reg].bitBufCntBits = 0;
 
   hCrcInfo->regStart = (hCrcInfo->regStart + 1) % MAX_CRC_REGS;
@@ -296,10 +296,10 @@
 
   if (hBs->ConfigCache == BS_WRITER) {
     hCrcInfo->crcRegData[reg].bitBufCntBits =
-        FDKgetValidBits(hBs) - hCrcInfo->crcRegData[reg].validBits;
+        (INT)FDKgetValidBits(hBs) - hCrcInfo->crcRegData[reg].validBits;
   } else {
     hCrcInfo->crcRegData[reg].bitBufCntBits =
-        hCrcInfo->crcRegData[reg].validBits - FDKgetValidBits(hBs);
+        hCrcInfo->crcRegData[reg].validBits - (INT)FDKgetValidBits(hBs);
   }
 
   if (hCrcInfo->crcRegData[reg].maxBits == 0) {
@@ -432,7 +432,7 @@
   if (hBs->ConfigCache == BS_READER) {
     bsReader = *hBs;
     FDKpushBiDirectional(&bsReader,
-                         -(INT)(rD->validBits - FDKgetValidBits(&bsReader)));
+                         -(rD->validBits - (INT)FDKgetValidBits(&bsReader)));
   } else {
     FDKinitBitStream(&bsReader, hBs->hBitBuf.Buffer, hBs->hBitBuf.bufSize,
                      hBs->hBitBuf.ValidBits, BS_READER);
@@ -441,7 +441,7 @@
 
   int bits, rBits;
   rBits = (rD->maxBits >= 0) ? rD->maxBits : -rD->maxBits; /* ramaining bits */
-  if ((rD->maxBits > 0) && (((INT)rD->bitBufCntBits >> 3 << 3) < rBits)) {
+  if ((rD->maxBits > 0) && ((rD->bitBufCntBits >> 3 << 3) < rBits)) {
     bits = rD->bitBufCntBits;
   } else {
     bits = rBits;
diff --git a/libMpegTPDec/src/tpdec_asc.cpp b/libMpegTPDec/src/tpdec_asc.cpp
index 74beaa6..b7fd2a1 100644
--- a/libMpegTPDec/src/tpdec_asc.cpp
+++ b/libMpegTPDec/src/tpdec_asc.cpp
@@ -257,11 +257,11 @@
     }
   } else {
     /* No valid extension data found -> restore the initial bitbuffer state */
-    FDKpushBack(bs, startAnchor - FDKgetValidBits(bs));
+    FDKpushBack(bs, (INT)startAnchor - (INT)FDKgetValidBits(bs));
   }
 
   /* Always report the bytes read. */
-  *bytesAvailable -= (startAnchor - FDKgetValidBits(bs)) >> 3;
+  *bytesAvailable -= ((INT)startAnchor - (INT)FDKgetValidBits(bs)) >> 3;
 
   return (err);
 }
diff --git a/libMpegTPDec/src/tpdec_lib.cpp b/libMpegTPDec/src/tpdec_lib.cpp
index 306bec0..5eeb7fc 100644
--- a/libMpegTPDec/src/tpdec_lib.cpp
+++ b/libMpegTPDec/src/tpdec_lib.cpp
@@ -283,7 +283,7 @@
 
   for (i = 0; i < 2; i++) {
     if (i > 0) {
-      FDKpushBack(hBs, length * 8 - FDKgetValidBits(hBs));
+      FDKpushBack(hBs, (INT)length * 8 - (INT)FDKgetValidBits(hBs));
       configMode = AC_CM_ALLOC_MEM;
     }
 
diff --git a/libSACdec/src/sac_bitdec.cpp b/libSACdec/src/sac_bitdec.cpp
index b2f3b7c..37e0cf2 100644
--- a/libSACdec/src/sac_bitdec.cpp
+++ b/libSACdec/src/sac_bitdec.cpp
@@ -566,7 +566,7 @@
                                 with respect to the beginning of the syntactic
                                 element in which ByteAlign() occurs. */
 
-  numHeaderBits = cfgStartPos - FDKgetValidBits(bitstream);
+  numHeaderBits = cfgStartPos - (INT)FDKgetValidBits(bitstream);
   bitsAvailable -= numHeaderBits;
 
   pSpatialSpecificConfig->sacExtCnt = 0;
@@ -594,7 +594,7 @@
        bitbuffer is exactly at its end when leaving the function. */
     FDKpushBiDirectional(
         bitstream,
-        (sacHeaderLen * 8) - (cfgStartPos - FDKgetValidBits(bitstream)));
+        (sacHeaderLen * 8) - (cfgStartPos - (INT)FDKgetValidBits(bitstream)));
   }
 
   return err;
diff --git a/libSBRdec/src/psbitdec.cpp b/libSBRdec/src/psbitdec.cpp
index b2ea2e9..1521178 100644
--- a/libSBRdec/src/psbitdec.cpp
+++ b/libSBRdec/src/psbitdec.cpp
@@ -496,7 +496,7 @@
     /* no useful PS data could be read from bitstream */
     h_ps_d->bPsDataAvail[h_ps_d->bsReadSlot] = ppt_none;
     /* discard all remaining bits */
-    nBitsLeft -= startbits - FDKgetValidBits(hBitBuf);
+    nBitsLeft -= startbits - (INT)FDKgetValidBits(hBitBuf);
     while (nBitsLeft > 0) {
       int i = nBitsLeft;
       if (i > 8) {
@@ -505,7 +505,7 @@
       FDKreadBits(hBitBuf, i);
       nBitsLeft -= i;
     }
-    return (startbits - FDKgetValidBits(hBitBuf));
+    return (UINT)(startbits - (INT)FDKgetValidBits(hBitBuf));
   }
 
   if (pBsData->modeIid > 2) {