From 501c3c11522f3ae69d11e23a457a2d1cfe1fa299 Mon Sep 17 00:00:00 2001 From: Nathalie Le Clair Date: Fri, 10 Feb 2023 10:06:23 +0100 Subject: [PATCH] Handle out-of-bound indices Bug: 267007175 Test: lunch cf_x86_tv-userdebug; make; atest VtsHalTvHdmiConnectionAidlTargetTest; Change-Id: I0083953e8eaadea0ac66a9103358c0d4e1427086 --- .../aidl/default/HdmiConnectionMock.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/tv/hdmi/connection/aidl/default/HdmiConnectionMock.cpp b/tv/hdmi/connection/aidl/default/HdmiConnectionMock.cpp index ca8c348f93..8f4411bd8e 100644 --- a/tv/hdmi/connection/aidl/default/HdmiConnectionMock.cpp +++ b/tv/hdmi/connection/aidl/default/HdmiConnectionMock.cpp @@ -70,16 +70,21 @@ ScopedAStatus HdmiConnectionMock::setCallback( } ScopedAStatus HdmiConnectionMock::setHpdSignal(HpdSignal signal, int32_t portId) { - if (mHdmiThreadRun) { - mHpdSignal.at(portId - 1) = signal; - return ScopedAStatus::ok(); - } else { + if (portId > mTotalPorts || portId < 1) { + return ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT); + } + if (!mHdmiThreadRun) { return ScopedAStatus::fromServiceSpecificError( static_cast(Result::FAILURE_INVALID_STATE)); } + mHpdSignal.at(portId - 1) = signal; + return ScopedAStatus::ok(); } ScopedAStatus HdmiConnectionMock::getHpdSignal(int32_t portId, HpdSignal* _aidl_return) { + if (portId > mTotalPorts || portId < 1) { + return ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT); + } *_aidl_return = mHpdSignal.at(portId - 1); return ScopedAStatus::ok(); } @@ -123,7 +128,7 @@ void HdmiConnectionMock::handleHotplugMessage(unsigned char* msgBuf) { bool connected = ((msgBuf[3]) & 0xf) > 0; int32_t portId = static_cast(msgBuf[0] & 0xf); - if (portId > static_cast(mPortInfos.size())) { + if (portId > static_cast(mPortInfos.size()) || portId < 1) { ALOGD("[halimp_aidl] ignore hot plug message, id %x does not exist", portId); return; }