MLCE-13: Sanitizing matrix argument in the Warp.

This changes help to prevent errors like passing a matrix
with less elements than required into the warp functions.

Change-Id: I863f933a5e0568258717cffed3a20788d3d03083
Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/143044
Tested-by: Jenkins <bsgcomp@arm.com>
Reviewed-by: Anthony Barbier <anthony.barbier@arm.com>
diff --git a/src/core/CL/kernels/CLWarpAffineKernel.cpp b/src/core/CL/kernels/CLWarpAffineKernel.cpp
index be095f2..e0e0940 100644
--- a/src/core/CL/kernels/CLWarpAffineKernel.cpp
+++ b/src/core/CL/kernels/CLWarpAffineKernel.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -42,9 +42,9 @@
 
 namespace
 {
-void options_add_matrix(std::set<std::string> &options, const float *matrix, size_t size)
+void options_add_matrix(std::set<std::string> &options, const std::array<float, 9> &matrix)
 {
-    for(size_t i = 0; i < size; ++i)
+    for(size_t i = 0; i < 6; ++i)
     {
         std::stringstream mat_str;
         mat_str << "-DMAT" << i << "=" << matrix[i] << " ";
@@ -58,7 +58,7 @@
     return BorderSize(1);
 }
 
-void CLWarpAffineKernel::configure(const ICLTensor *input, ICLTensor *output, const float *matrix, InterpolationPolicy policy)
+void CLWarpAffineKernel::configure(const ICLTensor *input, ICLTensor *output, const std::array<float, 9> &matrix, InterpolationPolicy policy)
 {
     ARM_COMPUTE_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(input, 1, DataType::U8);
     ARM_COMPUTE_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(output, 1, DataType::U8);
@@ -69,7 +69,7 @@
 
     // Create build options
     std::set<std::string> options;
-    options_add_matrix(options, matrix, 6);
+    options_add_matrix(options, matrix);
     options.emplace(("-DDATA_TYPE=" + get_cl_type_from_data_type(input->info()->data_type())));
 
     // Create kernel
diff --git a/src/core/CL/kernels/CLWarpPerspectiveKernel.cpp b/src/core/CL/kernels/CLWarpPerspectiveKernel.cpp
index a47952f..d6fcb09 100644
--- a/src/core/CL/kernels/CLWarpPerspectiveKernel.cpp
+++ b/src/core/CL/kernels/CLWarpPerspectiveKernel.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -42,9 +42,9 @@
 
 namespace
 {
-inline void options_add_matrix(std::set<std::string> &options, const float *matrix, size_t size)
+inline void options_add_matrix(std::set<std::string> &options, const std::array<float, 9> &matrix)
 {
-    for(size_t i = 0; i < size; ++i)
+    for(size_t i = 0; i < 9; ++i)
     {
         std::stringstream mat_str;
         mat_str << "-DMAT" << i << "=" << matrix[i] << " ";
@@ -58,7 +58,7 @@
     return BorderSize(1);
 }
 
-void CLWarpPerspectiveKernel::configure(const ICLTensor *input, ICLTensor *output, const float *matrix, InterpolationPolicy policy)
+void CLWarpPerspectiveKernel::configure(const ICLTensor *input, ICLTensor *output, const std::array<float, 9> &matrix, InterpolationPolicy policy)
 {
     ARM_COMPUTE_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(input, 1, DataType::U8);
     ARM_COMPUTE_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(output, 1, DataType::U8);
@@ -69,7 +69,7 @@
 
     // Create build options
     std::set<std::string> options;
-    options_add_matrix(options, matrix, 9);
+    options_add_matrix(options, matrix);
     options.emplace(("-DDATA_TYPE=" + get_cl_type_from_data_type(input->info()->data_type())));
 
     // Create kernel
diff --git a/src/core/NEON/kernels/NEWarpKernel.cpp b/src/core/NEON/kernels/NEWarpKernel.cpp
index 0fa8278..d04bc07 100644
--- a/src/core/NEON/kernels/NEWarpKernel.cpp
+++ b/src/core/NEON/kernels/NEWarpKernel.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2017 ARM Limited.
+ * Copyright (c) 2016-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -45,7 +45,7 @@
 } // namespace
 
 INEWarpKernel::INEWarpKernel()
-    : _func(nullptr), _input(nullptr), _output(nullptr), _constant_border_value(0), _matrix(nullptr)
+    : _func(nullptr), _input(nullptr), _output(nullptr), _constant_border_value(0), _matrix()
 {
 }
 
@@ -64,11 +64,10 @@
     (this->*_func)(window);
 }
 
-void INEWarpKernel::configure(const ITensor *input, ITensor *output, const float *matrix, BorderMode border_mode, uint8_t constant_border_value)
+void INEWarpKernel::configure(const ITensor *input, ITensor *output, const std::array<float, 9> &matrix, BorderMode border_mode, uint8_t constant_border_value)
 {
     ARM_COMPUTE_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(input, 1, DataType::U8);
     ARM_COMPUTE_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(output, 1, DataType::U8);
-    ARM_COMPUTE_ERROR_ON(nullptr == matrix);
 
     _matrix                = matrix;
     _constant_border_value = constant_border_value;