From c229b3fd81b42140c0fa8731e90bc07323cec794 Mon Sep 17 00:00:00 2001 From: Ryan OShea Date: Tue, 27 Jun 2023 22:34:54 +0100 Subject: IVGCVSW-7676 Audit the use of ARMNN_ASSERT * Replace most ARMNN_ASSERT's from tflite parser * Replace most ARMNN_ASSERT's from onnx parser * Replace some ARMNN_ASSERT's from tflite delegate * Replace some ARMNN_ASSERT;s from include files Signed-off-by: Ryan OShea Change-Id: Ie052e0180060203f28f64ebf54acad298f431caf --- delegate/classic/src/ClassicDelegateUtils.hpp | 5 ++++- delegate/classic/src/Split.hpp | 18 +++++++++++++++--- delegate/classic/src/Transpose.hpp | 18 +++++++++++++++--- delegate/classic/src/armnn_delegate.cpp | 7 ++++++- delegate/common/src/DelegateUtils.hpp | 7 +++++-- delegate/opaque/src/Split.hpp | 18 +++++++++++++++--- delegate/opaque/src/Transpose.hpp | 16 +++++++++++++--- delegate/opaque/src/armnn_delegate.cpp | 7 ++++++- 8 files changed, 79 insertions(+), 17 deletions(-) (limited to 'delegate') diff --git a/delegate/classic/src/ClassicDelegateUtils.hpp b/delegate/classic/src/ClassicDelegateUtils.hpp index 8a9409df6a..8d6f0495f8 100644 --- a/delegate/classic/src/ClassicDelegateUtils.hpp +++ b/delegate/classic/src/ClassicDelegateUtils.hpp @@ -193,7 +193,10 @@ TfLiteStatus Connect(armnn::IConnectableLayer* layer, TfLiteNode* tfLiteNode, armnnDelegate::DelegateData& data) { - ARMNN_ASSERT(static_cast(tfLiteNode->outputs->size) == layer->GetNumOutputSlots()); + if (static_cast(tfLiteNode->outputs->size) != layer->GetNumOutputSlots()) + { + return kTfLiteError; + } // Connect the input slots for (unsigned int inputIndex = 0; inputIndex < layer->GetNumInputSlots(); ++inputIndex) diff --git a/delegate/classic/src/Split.hpp b/delegate/classic/src/Split.hpp index fcd901b23e..aaa610259f 100644 --- a/delegate/classic/src/Split.hpp +++ b/delegate/classic/src/Split.hpp @@ -44,7 +44,11 @@ TfLiteStatus VisitSplitOperator(DelegateData& delegateData, const armnn::TensorInfo& inputTensorInfo = GetTensorInfoForTfLiteTensor(tfLiteInputTensor); - ARMNN_ASSERT(GetTensorInfoForTfLiteTensor(tfLiteAxisTensor).GetNumElements() == 1); + if (GetTensorInfoForTfLiteTensor(tfLiteAxisTensor).GetNumElements() != 1) + { + return kTfLiteError; + } + auto* axisTensorDataPtr = tflite::GetTensorData(&tfLiteAxisTensor); std::vector axisTensorData(axisTensorDataPtr, axisTensorDataPtr + 1); int32_t axis = axisTensorData[0]; @@ -183,8 +187,16 @@ TfLiteStatus VisitSplitVOperator(DelegateData& delegateData, const armnn::TensorInfo& inputTensorInfo = GetTensorInfoForTfLiteTensor(tfLiteInputTensor); const armnn::TensorInfo& splitsTensorInfo = GetTensorInfoForTfLiteTensor(tfLiteSplitsTensor); - ARMNN_ASSERT(splitsTensorInfo.GetNumDimensions() == 1); - ARMNN_ASSERT(GetTensorInfoForTfLiteTensor(tfLiteAxisTensor).GetNumElements() == 1); + + if (splitsTensorInfo.GetNumDimensions() != 1) + { + return kTfLiteError; + } + + if (GetTensorInfoForTfLiteTensor(tfLiteAxisTensor).GetNumElements() != 1) + { + return kTfLiteError; + } auto* axisTensorDataPtr = tflite::GetTensorData(&tfLiteAxisTensor); std::vector axisTensorData(axisTensorDataPtr, axisTensorDataPtr + 1); diff --git a/delegate/classic/src/Transpose.hpp b/delegate/classic/src/Transpose.hpp index 247ddf7e9e..9aa316d8c3 100644 --- a/delegate/classic/src/Transpose.hpp +++ b/delegate/classic/src/Transpose.hpp @@ -63,8 +63,15 @@ TfLiteStatus VisitTransposeOperator(DelegateData& delegateData, auto* permTensorDataPtr = tflite::GetTensorData(&tfLiteInputTensor1); unsigned int numEl = tfLiteInputTensor1.dims->data[0]; - ARMNN_ASSERT( numEl <= static_cast(armnn::MaxNumOfTensorDimensions)); - ARMNN_ASSERT( tfLiteInputTensor1.dims->size == 1); // ensure only single dimension to the permutation tensor + if (numEl > static_cast(armnn::MaxNumOfTensorDimensions)) + { + return kTfLiteError; + } + + if (tfLiteInputTensor1.dims->size != 1) + { + return kTfLiteError; + } armnn::TransposeDescriptor descriptor(armnn::PermutationVector( reinterpret_cast (permTensorDataPtr), @@ -95,7 +102,12 @@ TfLiteStatus VisitTransposeOperator(DelegateData& delegateData, armnn::IConnectableLayer* transposeLayer = delegateData.m_Network->AddTransposeLayer(descriptor, layerName.c_str()); transposeLayer->SetBackendId(setBackend); ARMNN_ASSERT(transposeLayer != nullptr); - ARMNN_ASSERT(transposeLayer->GetNumInputSlots() == 1); // permutation vector given to descriptor object + + // permutation vector given to descriptor object + if (transposeLayer->GetNumInputSlots() != 1) + { + return kTfLiteError; + } armnn::IOutputSlot& outputSlot = transposeLayer->GetOutputSlot(0); outputSlot.SetTensorInfo(outputTensorInfo); diff --git a/delegate/classic/src/armnn_delegate.cpp b/delegate/classic/src/armnn_delegate.cpp index 2483835989..de2aa0c632 100644 --- a/delegate/classic/src/armnn_delegate.cpp +++ b/delegate/classic/src/armnn_delegate.cpp @@ -312,7 +312,12 @@ TfLiteStatus ArmnnSubgraph::AddOutputLayer(DelegateData& delegateData, armnn::IConnectableLayer* layer = delegateData.m_Network->AddOutputLayer(bindingId); auto tensorInfo = GetTensorInfoForTfLiteTensor(tensor); - ARMNN_ASSERT(delegateData.m_OutputSlotForNode[static_cast(tensorId)] != nullptr); + + if (delegateData.m_OutputSlotForNode[static_cast(tensorId)] == nullptr) + { + return kTfLiteError; + } + delegateData.m_OutputSlotForNode[static_cast(tensorId)]->Connect(layer->GetInputSlot(0)); outputBindings.push_back(std::make_pair(bindingId, tensorInfo)); } diff --git a/delegate/common/src/DelegateUtils.hpp b/delegate/common/src/DelegateUtils.hpp index 418cad313f..a74ed8b549 100644 --- a/delegate/common/src/DelegateUtils.hpp +++ b/delegate/common/src/DelegateUtils.hpp @@ -109,8 +109,11 @@ unsigned int ComputeWrappedIndex(int index, unsigned int numDimensions) { int numDims = armnn::numeric_cast(numDimensions); int wrappedIndex = index < 0 ? numDims + index : index; - ARMNN_ASSERT(wrappedIndex >= 0); - ARMNN_ASSERT(wrappedIndex < numDims); + + if (wrappedIndex < 0 || wrappedIndex >= numDims) + { + throw armnn::ParseException("Unable to compute wrapped index"); + } return static_cast(wrappedIndex); }; diff --git a/delegate/opaque/src/Split.hpp b/delegate/opaque/src/Split.hpp index aec0fb674a..2dbfa602fb 100644 --- a/delegate/opaque/src/Split.hpp +++ b/delegate/opaque/src/Split.hpp @@ -68,7 +68,11 @@ TfLiteStatus VisitSplitOperator(DelegateData& delegateData, const armnn::TensorInfo& inputTensorInfo = GetTensorInfoForTfLiteOpaqueTensor(tfLiteInputTensor); - ARMNN_ASSERT(GetTensorInfoForTfLiteOpaqueTensor(tfLiteAxisTensor).GetNumElements() == 1); + if (GetTensorInfoForTfLiteOpaqueTensor(tfLiteAxisTensor).GetNumElements() != 1) + { + return kTfLiteError; + } + auto* axisTensorDataPtr = static_cast(TfLiteOpaqueTensorData(tfLiteAxisTensor)); std::vector axisTensorData(axisTensorDataPtr, axisTensorDataPtr + 1); int32_t axis = axisTensorData[0]; @@ -230,8 +234,16 @@ TfLiteStatus VisitSplitVOperator(DelegateData& delegateData, const armnn::TensorInfo& inputTensorInfo = GetTensorInfoForTfLiteOpaqueTensor(tfLiteInputTensor); const armnn::TensorInfo& splitsTensorInfo = GetTensorInfoForTfLiteOpaqueTensor(tfLiteSplitsTensor); - ARMNN_ASSERT(splitsTensorInfo.GetNumDimensions() == 1); - ARMNN_ASSERT(GetTensorInfoForTfLiteOpaqueTensor(tfLiteAxisTensor).GetNumElements() == 1); + + if (splitsTensorInfo.GetNumDimensions() != 1) + { + return kTfLiteError; + } + + if (GetTensorInfoForTfLiteOpaqueTensor(tfLiteAxisTensor).GetNumElements() != 1) + { + return kTfLiteError; + } auto* axisTensorDataPtr = static_cast(TfLiteOpaqueTensorData(tfLiteAxisTensor)); std::vector axisTensorData(axisTensorDataPtr, axisTensorDataPtr + 1); diff --git a/delegate/opaque/src/Transpose.hpp b/delegate/opaque/src/Transpose.hpp index 5af03b3790..4b2bdf376a 100644 --- a/delegate/opaque/src/Transpose.hpp +++ b/delegate/opaque/src/Transpose.hpp @@ -65,9 +65,16 @@ TfLiteStatus VisitTransposeOperator(DelegateData& delegateData, auto* permTensorDataPtr = static_cast(TfLiteOpaqueTensorData(tfLiteInputTensor1)); unsigned int numEl = TfLiteOpaqueTensorDim(tfLiteInputTensor1, 0); - ARMNN_ASSERT( numEl <= static_cast(armnn::MaxNumOfTensorDimensions) ); + if ( numEl > static_cast(armnn::MaxNumOfTensorDimensions) ) + { + return kTfLiteError; + } + // Ensure only single dimension to the permutation tensor - ARMNN_ASSERT( TfLiteOpaqueTensorNumDims(tfLiteInputTensor1) == 1 ); + if ( TfLiteOpaqueTensorNumDims(tfLiteInputTensor1) != 1 ) + { + return kTfLiteError; + } armnn::TransposeDescriptor descriptor(armnn::PermutationVector( reinterpret_cast (permTensorDataPtr), @@ -99,7 +106,10 @@ TfLiteStatus VisitTransposeOperator(DelegateData& delegateData, transposeLayer->SetBackendId(setBackend); ARMNN_ASSERT(transposeLayer != nullptr); // Permutation vector given to descriptor object - ARMNN_ASSERT(transposeLayer->GetNumInputSlots() == 1); + if (transposeLayer->GetNumInputSlots() != 1) + { + return kTfLiteError; + } armnn::IOutputSlot& outputSlot = transposeLayer->GetOutputSlot(0); outputSlot.SetTensorInfo(outputTensorInfo); diff --git a/delegate/opaque/src/armnn_delegate.cpp b/delegate/opaque/src/armnn_delegate.cpp index 60da293eb2..bad1abaa59 100644 --- a/delegate/opaque/src/armnn_delegate.cpp +++ b/delegate/opaque/src/armnn_delegate.cpp @@ -368,7 +368,12 @@ TfLiteStatus ArmnnSubgraph::AddOutputLayer(DelegateData& delegateData, armnn::IConnectableLayer* layer = delegateData.m_Network->AddOutputLayer(bindingId); auto tensorInfo = GetTensorInfoForTfLiteOpaqueTensor(tensor); - ARMNN_ASSERT(delegateData.m_OutputSlotForNode[static_cast(tensorId)] != nullptr); + + if (delegateData.m_OutputSlotForNode[static_cast(tensorId)] == nullptr) + { + return kTfLiteError; + } + delegateData.m_OutputSlotForNode[static_cast(tensorId)]->Connect(layer->GetInputSlot(0)); outputBindings.push_back(std::make_pair(bindingId, tensorInfo)); } -- cgit v1.2.1