From c135179c935e3f85e591014e14be81b3f2597825 Mon Sep 17 00:00:00 2001 From: Kevin May Date: Tue, 28 Jul 2020 11:29:04 +0100 Subject: IVGCVSW-5079 Fix for Timeline decoder segfaults when given bad data * Check packet size/length in ReadSwTraceMessage * Update existing Unit tests * Add new Unit tests Signed-off-by: Kevin May Change-Id: Ie15be8bc289d7bcb354a259312aada5268bff4e4 --- src/profiling/test/BufferTests.cpp | 46 +++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) (limited to 'src/profiling/test/BufferTests.cpp') diff --git a/src/profiling/test/BufferTests.cpp b/src/profiling/test/BufferTests.cpp index 0225d750a7..804335138d 100644 --- a/src/profiling/test/BufferTests.cpp +++ b/src/profiling/test/BufferTests.cpp @@ -1,5 +1,5 @@ // -// Copyright © 2019 Arm Ltd. All rights reserved. +// Copyright © 2019 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // @@ -363,4 +363,48 @@ BOOST_AUTO_TEST_CASE(BufferMarkReadTest) BOOST_TEST(packetBuffer3.get()); } +BOOST_AUTO_TEST_CASE(ReadSwTraceMessageExceptionTest0) +{ + IPacketBufferPtr packetBuffer = std::make_unique(512); + + BOOST_TEST(packetBuffer->GetSize() == 0); + + // Write zero data to the buffer + WriteUint32(packetBuffer, 0, 0); + WriteUint32(packetBuffer, 4, 0); + WriteUint32(packetBuffer, 8, 0); + WriteUint32(packetBuffer, 12, 0); + + // Commit + packetBuffer->Commit(16); + + unsigned int uint32_t_size = sizeof(uint32_t); + unsigned int offset = uint32_t_size; + BOOST_CHECK_THROW(ReadSwTraceMessage(packetBuffer->GetReadableData(), offset, packetBuffer->GetSize()), + armnn::RuntimeException); + +} + +BOOST_AUTO_TEST_CASE(ReadSwTraceMessageExceptionTest1) +{ + IPacketBufferPtr packetBuffer = std::make_unique(512); + + BOOST_TEST(packetBuffer->GetSize() == 0); + + // Write data to the buffer + WriteUint32(packetBuffer, 0, 10); + WriteUint32(packetBuffer, 4, 20); + WriteUint32(packetBuffer, 8, 30); + WriteUint32(packetBuffer, 12, 40); + + // Commit + packetBuffer->Commit(16); + + unsigned int uint32_t_size = sizeof(uint32_t); + unsigned int offset = uint32_t_size; + BOOST_CHECK_THROW(ReadSwTraceMessage(packetBuffer->GetReadableData(), offset, packetBuffer->GetSize()), + armnn::RuntimeException); + +} + BOOST_AUTO_TEST_SUITE_END() -- cgit v1.2.1