summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChong Zhang <chz@google.com>2019-09-09 13:20:10 -0700
committerBryan Ferris <bferris@google.com>2019-12-20 10:33:53 -0800
commit1eba80de4e733a5222459020517ed93327966640 (patch)
tree59430bb806951a0ed4f52f63b9ec770c967e35ac
parent9ed54cdf4d8970bdeb88e4488dabb56e1d6c79b7 (diff)
downloadframeworks_av-1eba80de4e733a5222459020517ed93327966640.tar.gz
frameworks_av-1eba80de4e733a5222459020517ed93327966640.tar.bz2
frameworks_av-1eba80de4e733a5222459020517ed93327966640.zip
Check actual read bytes for TS packets
Check actual bytes read when feeding the data to TS parser. Bug: 140177694 Test: poc in bug; StreamingMediaPlayerTest Merged-In: I4b498fe375af657e17838e5839e6348e1463d559 Change-Id: I4b498fe375af657e17838e5839e6348e1463d559
-rw-r--r--media/libmediaplayerservice/nuplayer/StreamingSource.cpp21
1 files changed, 12 insertions, 9 deletions
diff --git a/media/libmediaplayerservice/nuplayer/StreamingSource.cpp b/media/libmediaplayerservice/nuplayer/StreamingSource.cpp
index afdcd3739f..f21d2b3323 100644
--- a/media/libmediaplayerservice/nuplayer/StreamingSource.cpp
+++ b/media/libmediaplayerservice/nuplayer/StreamingSource.cpp
@@ -130,29 +130,32 @@ void NuPlayer::StreamingSource::onReadBuffer() {
} else if (n < 0) {
break;
} else {
- if (buffer[0] == 0x00) {
+ if (buffer[0] == 0x00) { // OK to access buffer[0] since n must be > 0 here
// XXX legacy
if (extra == NULL) {
extra = new AMessage;
}
- uint8_t type = buffer[1];
+ uint8_t type = 0;
+ if (n > 1) {
+ type = buffer[1];
- if (type & 2) {
- int64_t mediaTimeUs;
- memcpy(&mediaTimeUs, &buffer[2], sizeof(mediaTimeUs));
+ if ((type & 2) && (n >= 2 + sizeof(int64_t))) {
+ int64_t mediaTimeUs;
+ memcpy(&mediaTimeUs, &buffer[2], sizeof(mediaTimeUs));
- extra->setInt64(kATSParserKeyMediaTimeUs, mediaTimeUs);
+ extra->setInt64(kATSParserKeyMediaTimeUs, mediaTimeUs);
+ }
}
mTSParser->signalDiscontinuity(
((type & 1) == 0)
- ? ATSParser::DISCONTINUITY_TIME
- : ATSParser::DISCONTINUITY_FORMATCHANGE,
+ ? ATSParser::DISCONTINUITY_TIME
+ : ATSParser::DISCONTINUITY_FORMATCHANGE,
extra);
} else {
- status_t err = mTSParser->feedTSPacket(buffer, sizeof(buffer));
+ status_t err = mTSParser->feedTSPacket(buffer, n);
if (err != OK) {
ALOGE("TS Parser returned error %d", err);