From 4878995fbb1176ea89690e0612e567da856209cd Mon Sep 17 00:00:00 2001 From: Robert Shih Date: Mon, 6 Apr 2020 15:24:06 -0700 Subject: [PATCH] AMPEG4ElementaryAssembler: reject malformed desc Bug: 124777537 Test: (1) python rtsp_server2.py $server_addr Test: (2) adb shell am start -a android.intent.action.VIEW -n com.google.android.apps.photos/.pager.HostPhotoPagerActivity -t video/'*' -d rtsp://$server_addr/a.mp4 Change-Id: Iacc6882819e0d99ffdab409324301e8f8d8125f7 --- .../libstagefright/rtsp/AMPEG4ElementaryAssembler.cpp | 8 ++++++++ media/libstagefright/rtsp/AMPEG4ElementaryAssembler.h | 1 + media/libstagefright/rtsp/ARTPAssembler.h | 1 + media/libstagefright/rtsp/ARTPSource.cpp | 10 ++++++++-- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/media/libstagefright/rtsp/AMPEG4ElementaryAssembler.cpp b/media/libstagefright/rtsp/AMPEG4ElementaryAssembler.cpp index 76d3674b21..7bd33c1c60 100644 --- a/media/libstagefright/rtsp/AMPEG4ElementaryAssembler.cpp +++ b/media/libstagefright/rtsp/AMPEG4ElementaryAssembler.cpp @@ -203,6 +203,14 @@ struct AUHeader { unsigned mSerial; }; +bool AMPEG4ElementaryAssembler::initCheck() { + if(mSizeLength == 0 || mIndexLength == 0 || mIndexDeltaLength == 0) { + android_errorWriteLog(0x534e4554, "124777537"); + return false; + } + return true; +} + ARTPAssembler::AssemblyStatus AMPEG4ElementaryAssembler::addPacket( const sp &source) { List > *queue = source->queue(); diff --git a/media/libstagefright/rtsp/AMPEG4ElementaryAssembler.h b/media/libstagefright/rtsp/AMPEG4ElementaryAssembler.h index 693fca5675..57b7d718f4 100644 --- a/media/libstagefright/rtsp/AMPEG4ElementaryAssembler.h +++ b/media/libstagefright/rtsp/AMPEG4ElementaryAssembler.h @@ -36,6 +36,7 @@ struct AMPEG4ElementaryAssembler : public ARTPAssembler { AMPEG4ElementaryAssembler( const sp ¬ify, const AString &desc, const AString ¶ms); + virtual bool initCheck(); protected: virtual ~AMPEG4ElementaryAssembler(); diff --git a/media/libstagefright/rtsp/ARTPAssembler.h b/media/libstagefright/rtsp/ARTPAssembler.h index 7c147be374..4082d4c484 100644 --- a/media/libstagefright/rtsp/ARTPAssembler.h +++ b/media/libstagefright/rtsp/ARTPAssembler.h @@ -39,6 +39,7 @@ struct ARTPAssembler : public RefBase { void onPacketReceived(const sp &source); virtual void onByeReceived() = 0; + virtual bool initCheck() { return true; } protected: virtual AssemblyStatus assembleMore(const sp &source) = 0; diff --git a/media/libstagefright/rtsp/ARTPSource.cpp b/media/libstagefright/rtsp/ARTPSource.cpp index 4afa6f4485..f5f8128b1f 100644 --- a/media/libstagefright/rtsp/ARTPSource.cpp +++ b/media/libstagefright/rtsp/ARTPSource.cpp @@ -82,6 +82,10 @@ ARTPSource::ARTPSource( } else { TRESPASS(); } + + if (mAssembler != NULL && !mAssembler->initCheck()) { + mAssembler.clear(); + } } static uint32_t AbsDiff(uint32_t seq1, uint32_t seq2) { @@ -89,7 +93,7 @@ static uint32_t AbsDiff(uint32_t seq1, uint32_t seq2) { } void ARTPSource::processRTPPacket(const sp &buffer) { - if (queuePacket(buffer) && mAssembler != NULL) { + if (mAssembler != NULL && queuePacket(buffer)) { mAssembler->onPacketReceived(this); } } @@ -171,7 +175,9 @@ bool ARTPSource::queuePacket(const sp &buffer) { } void ARTPSource::byeReceived() { - mAssembler->onByeReceived(); + if (mAssembler != NULL) { + mAssembler->onByeReceived(); + } } void ARTPSource::addFIR(const sp &buffer) {