From 419993512e11643d26fbc56d3465022a696d2108 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Per=20=C3=85strand?= Date: Wed, 18 May 2022 09:09:01 +0200 Subject: Handle network indices out of range Check that getting the network succeeds before parsing the the buffer to avoid hardfault. Change-Id: I582412fb0e7459bf45fdb790df2d48401c1a2d0b --- applications/message_handler/message_handler.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/applications/message_handler/message_handler.cpp b/applications/message_handler/message_handler.cpp index f109dc8..4a3938e 100644 --- a/applications/message_handler/message_handler.cpp +++ b/applications/message_handler/message_handler.cpp @@ -383,12 +383,16 @@ void IncomingMessageHandler::sendNetworkInfoRsp(uint64_t userArg, ethosu_core_ne void *buffer; size_t size; - getNetwork(network, buffer, size); - bool failed = parser.parseModel(buffer, - rsp.desc, - InferenceProcess::makeArray(rsp.ifm_size, rsp.ifm_count, ETHOSU_CORE_BUFFER_MAX), - InferenceProcess::makeArray(rsp.ofm_size, rsp.ofm_count, ETHOSU_CORE_BUFFER_MAX)); - rsp.status = failed ? ETHOSU_CORE_STATUS_ERROR : ETHOSU_CORE_STATUS_OK; + + bool failed = getNetwork(network, buffer, size); + + if (!failed) { + failed = parser.parseModel(buffer, + rsp.desc, + InferenceProcess::makeArray(rsp.ifm_size, rsp.ifm_count, ETHOSU_CORE_BUFFER_MAX), + InferenceProcess::makeArray(rsp.ofm_size, rsp.ofm_count, ETHOSU_CORE_BUFFER_MAX)); + } + rsp.status = failed ? ETHOSU_CORE_STATUS_ERROR : ETHOSU_CORE_STATUS_OK; if (!outputMessageQueue.write(ETHOSU_CORE_MSG_NETWORK_INFO_RSP, rsp)) { printf("ERROR: Msg: Failed to write network info response. No mailbox message sent\n"); -- cgit v1.2.1