IVGCVSW-7901 Fix unsafe Usages of Memcpy in Armnn

* Updated usages of Memcpy to use proper checks for null instead of asserts
* Added error checking in places where none existed

Signed-off-by: David Monahan <david.monahan@arm.com>
Change-Id: I9529acd966466ba281f88918be2ec372a756e183
diff --git a/src/armnnUtils/Transpose.cpp b/src/armnnUtils/Transpose.cpp
index 3457cac..a8e4a1c 100644
--- a/src/armnnUtils/Transpose.cpp
+++ b/src/armnnUtils/Transpose.cpp
@@ -9,7 +9,6 @@
 
 #include "Half.hpp"
 
-#include <cassert>
 #include <cstring>
 
 namespace
@@ -23,7 +22,13 @@
     TransposeLoop(const armnn::TensorShape& srcShape, const armnn::PermutationVector& mappings)
         : m_SrcShape(srcShape)
     {
-        assert(srcShape.GetNumDimensions() == mappings.GetSize());
+        if (srcShape.GetNumDimensions() != mappings.GetSize())
+        {
+            std::stringstream msg;
+            msg << "Transpose: Number of shape dimensions (" << srcShape.GetNumDimensions() <<
+                ") does not match the size of the mappings (" << mappings.GetSize() << ")";
+            throw armnn::InvalidArgumentException(msg.str());
+        }
 
         const size_type numDims = srcShape.GetNumDimensions();
 
@@ -42,9 +47,18 @@
 
     void Unroll(const void* srcData, void* dstData, size_t dataTypeSize)
     {
-        assert(srcData);
-        assert(dstData);
-        assert(dataTypeSize > 0);
+        if (srcData == nullptr)
+        {
+            throw armnn::Exception("Transpose: Source Data pointer is null");
+        }
+        if (dstData == nullptr)
+        {
+            throw armnn::Exception("Transpose: Destination Data pointer is null");
+        }
+        if (dataTypeSize == 0)
+        {
+            throw armnn::Exception("Transpose: dataTypeSize is zero");
+        }
 
         const unsigned char* srcDataPtr = reinterpret_cast<const unsigned char*>(srcData);
         unsigned char* dstDataPtr       = reinterpret_cast<unsigned char*>(dstData);
@@ -61,13 +75,26 @@
                 const unsigned char* srcEnd, unsigned char* dstEnd,
                 size_t dataTypeSize)
     {
-        assert(srcData);
-        assert(dstData);
-        assert(srcEnd);
-        assert(dstEnd);
-        assert(srcData < srcEnd);
-        assert(dstData < dstEnd);
-        assert(dataTypeSize > 0);
+        if (srcData == nullptr)
+        {
+            throw armnn::Exception("Transpose: Source Data pointer is null");
+        }
+        if (dstData == nullptr)
+        {
+            throw armnn::Exception("Transpose: Destination Data pointer is null");
+        }
+        if (srcEnd == nullptr)
+        {
+            throw armnn::Exception("Transpose: Source End pointer is null");
+        }
+        if (dstEnd == nullptr)
+        {
+            throw armnn::Exception("Transpose: Destination End is zero");
+        }
+        if (dataTypeSize == 0)
+        {
+            throw armnn::Exception("Transpose: dataTypeSize is invalid");
+        }
 
         if (dimension >= m_SrcShape.GetNumDimensions())
         {
@@ -97,7 +124,13 @@
 
 armnn::TensorShape TransposeTensorShape(const armnn::TensorShape& srcShape, const armnn::PermutationVector& mappings)
 {
-    assert(srcShape.GetNumDimensions() == mappings.GetSize());
+    if (srcShape.GetNumDimensions() != mappings.GetSize())
+    {
+        std::stringstream msg;
+        msg << "Transpose: Number of shape dimensions (" << srcShape.GetNumDimensions() <<
+            ") does not match the size of the mappings (" << mappings.GetSize() << ")";
+        throw armnn::InvalidArgumentException(msg.str());
+    }
 
     const unsigned int numDims = mappings.GetSize();
     unsigned int outDims[armnn::MaxNumOfTensorDimensions];