stagefright: Fix overflow in AudioSource::dataCallback
Bug: 129158294
Test: atest CtsMediaTestCases:MediaRecorderTest
on cuttlefish
Change-Id: I01204576fc0c5091317d723bc5d5f519b058cafc
diff --git a/media/libstagefright/AudioSource.cpp b/media/libstagefright/AudioSource.cpp
index 5194e03..a713900 100644
--- a/media/libstagefright/AudioSource.cpp
+++ b/media/libstagefright/AudioSource.cpp
@@ -385,11 +385,11 @@
}
mLastFrameTimestampUs = timeUs;
- size_t numLostBytes = 0;
+ uint64_t numLostBytes = 0; // AudioRecord::getInputFramesLost() returns uint32_t
if (mNumFramesReceived > 0) { // Ignore earlier frame lost
// getInputFramesLost() returns the number of lost frames.
// Convert number of frames lost to number of bytes lost.
- numLostBytes = mRecord->getInputFramesLost() * mRecord->frameSize();
+ numLostBytes = (uint64_t)mRecord->getInputFramesLost() * mRecord->frameSize();
}
CHECK_EQ(numLostBytes & 1, 0u);
@@ -397,11 +397,11 @@
if (numLostBytes > 0) {
// Loss of audio frames should happen rarely; thus the LOGW should
// not cause a logging spam
- ALOGW("Lost audio record data: %zu bytes", numLostBytes);
+ ALOGW("Lost audio record data: %" PRIu64 " bytes", numLostBytes);
}
while (numLostBytes > 0) {
- size_t bufferSize = numLostBytes;
+ uint64_t bufferSize = numLostBytes;
if (numLostBytes > kMaxBufferSize) {
numLostBytes -= kMaxBufferSize;
bufferSize = kMaxBufferSize;