Fix overflow in PCR calculations
Bug: 28283706
Change-Id: I46fe99f43433a1f3a61e168136e17beb13b92156
diff --git a/media/libstagefright/mpeg2ts/ATSParser.cpp b/media/libstagefright/mpeg2ts/ATSParser.cpp
index fb43a38..b8248c4 100644
--- a/media/libstagefright/mpeg2ts/ATSParser.cpp
+++ b/media/libstagefright/mpeg2ts/ATSParser.cpp
@@ -1438,8 +1438,8 @@
// The number of bytes received by this parser up to and
// including the final byte of this PCR_ext field.
- size_t byteOffsetFromStart =
- mNumTSPacketsParsed * 188 + byteOffsetFromStartOfTSPacket;
+ uint64_t byteOffsetFromStart =
+ uint64_t(mNumTSPacketsParsed) * 188 + byteOffsetFromStartOfTSPacket;
for (size_t i = 0; i < mPrograms.size(); ++i) {
updatePCR(PID, PCR, byteOffsetFromStart);
@@ -1558,8 +1558,8 @@
__attribute__((no_sanitize("integer")))
void ATSParser::updatePCR(
- unsigned /* PID */, uint64_t PCR, size_t byteOffsetFromStart) {
- ALOGV("PCR 0x%016" PRIx64 " @ %zu", PCR, byteOffsetFromStart);
+ unsigned /* PID */, uint64_t PCR, uint64_t byteOffsetFromStart) {
+ ALOGV("PCR 0x%016" PRIx64 " @ %" PRIx64, PCR, byteOffsetFromStart);
if (mNumPCRs == 2) {
mPCR[0] = mPCR[1];
diff --git a/media/libstagefright/mpeg2ts/ATSParser.h b/media/libstagefright/mpeg2ts/ATSParser.h
index fb03cd6..9d9102d 100644
--- a/media/libstagefright/mpeg2ts/ATSParser.h
+++ b/media/libstagefright/mpeg2ts/ATSParser.h
@@ -182,10 +182,10 @@
// see feedTSPacket().
status_t parseTS(ABitReader *br, SyncEvent *event);
- void updatePCR(unsigned PID, uint64_t PCR, size_t byteOffsetFromStart);
+ void updatePCR(unsigned PID, uint64_t PCR, uint64_t byteOffsetFromStart);
uint64_t mPCR[2];
- size_t mPCRBytes[2];
+ uint64_t mPCRBytes[2];
int64_t mSystemTimeUs[2];
size_t mNumPCRs;