From f19e863cce96cc1e5f4ad7ce512810d5a2843ea6 Mon Sep 17 00:00:00 2001 From: Fraunhofer IIS FDK Date: Wed, 23 May 2018 18:33:57 +0200 Subject: Fix unsigned integer overflow in aacDecoder_UpdateBitStreamCounters() Bug: 80314771 Test: play AAC content over 2GB Change-Id: If791305bf95680b945971f9dc5f58495cbf6c8cd --- libAACdec/include/aacdecoder_lib.h | 18 ++++++++++-------- libAACdec/src/aacdecoder_lib.cpp | 4 ++-- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/libAACdec/include/aacdecoder_lib.h b/libAACdec/include/aacdecoder_lib.h index e811d04..3a9b910 100644 --- a/libAACdec/include/aacdecoder_lib.h +++ b/libAACdec/include/aacdecoder_lib.h @@ -861,14 +861,16 @@ typedef struct { returns AAC_DEC_TRANSPORT_SYNC_ERROR. It will be < 0 if the estimation failed. */ - UINT numTotalBytes; /*!< This is the number of total bytes that have passed - through the decoder. */ - UINT numBadBytes; /*!< This is the number of total bytes that were considered - with errors from numTotalBytes. */ - UINT numTotalAccessUnits; /*!< This is the number of total access units that - have passed through the decoder. */ - UINT numBadAccessUnits; /*!< This is the number of total access units that - were considered with errors from numTotalBytes. */ + INT64 numTotalBytes; /*!< This is the number of total bytes that have passed + through the decoder. */ + INT64 + numBadBytes; /*!< This is the number of total bytes that were considered + with errors from numTotalBytes. */ + INT64 + numTotalAccessUnits; /*!< This is the number of total access units that + have passed through the decoder. */ + INT64 numBadAccessUnits; /*!< This is the number of total access units that + were considered with errors from numTotalBytes. */ /* Metadata */ SCHAR drcProgRefLev; /*!< DRC program reference level. Defines the reference diff --git a/libAACdec/src/aacdecoder_lib.cpp b/libAACdec/src/aacdecoder_lib.cpp index cd112b6..d98cf5a 100644 --- a/libAACdec/src/aacdecoder_lib.cpp +++ b/libAACdec/src/aacdecoder_lib.cpp @@ -1085,12 +1085,12 @@ static void aacDecoder_UpdateBitStreamCounters(CStreamInfo *pSi, INT nBytes; nBytes = nBits >> 3; - pSi->numTotalBytes = (UINT)((INT)pSi->numTotalBytes + nBytes); + pSi->numTotalBytes += nBytes; if (IS_OUTPUT_VALID(ErrorStatus)) { pSi->numTotalAccessUnits++; } if (IS_DECODE_ERROR(ErrorStatus)) { - pSi->numBadBytes = (UINT)((INT)pSi->numBadBytes + nBytes); + pSi->numBadBytes += nBytes; pSi->numBadAccessUnits++; } } -- cgit v1.2.3