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/tests/validation/CL/WarpAffine.cpp b/tests/validation/CL/WarpAffine.cpp
index 7f3001c..29f24cc 100644
--- a/tests/validation/CL/WarpAffine.cpp
+++ b/tests/validation/CL/WarpAffine.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -65,8 +65,8 @@
     uint8_t                                constant_border_value = distribution_u8(gen);
 
     // Create the matrix
-    std::array<float, 6> matrix{ {} };
-    fill_warp_matrix<6>(matrix);
+    std::array<float, 9> matrix{ {} };
+    fill_warp_matrix<9>(matrix);
 
     // Create tensors
     CLTensor src = create_tensor<CLTensor>(shape, data_type);
@@ -77,7 +77,7 @@
 
     // Create and configure function
     CLWarpAffine warp_affine;
-    warp_affine.configure(&src, &dst, matrix.data(), policy, border_mode, constant_border_value);
+    warp_affine.configure(&src, &dst, matrix, policy, border_mode, constant_border_value);
 
     // Validate valid region
     const ValidRegion valid_region = shape_to_valid_region(shape);
diff --git a/tests/validation/CL/WarpPerspective.cpp b/tests/validation/CL/WarpPerspective.cpp
index a868e16..e164a80 100644
--- a/tests/validation/CL/WarpPerspective.cpp
+++ b/tests/validation/CL/WarpPerspective.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -78,7 +78,7 @@
 
     // Create and configure function
     CLWarpPerspective warp_perspective;
-    warp_perspective.configure(&src, &dst, matrix.data(), policy, border_mode, constant_border_value);
+    warp_perspective.configure(&src, &dst, matrix, policy, border_mode, constant_border_value);
 
     // Validate valid region
     const ValidRegion valid_region = shape_to_valid_region(shape);
diff --git a/tests/validation/NEON/WarpAffine.cpp b/tests/validation/NEON/WarpAffine.cpp
index 8c83507..6180d69 100644
--- a/tests/validation/NEON/WarpAffine.cpp
+++ b/tests/validation/NEON/WarpAffine.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -64,8 +64,8 @@
     uint8_t                                constant_border_value = distribution_u8(gen);
 
     // Create the matrix
-    std::array<float, 6> matrix{ {} };
-    fill_warp_matrix<6>(matrix);
+    std::array<float, 9> matrix{ {} };
+    fill_warp_matrix<9>(matrix);
 
     // Create tensors
     Tensor src = create_tensor<Tensor>(shape, data_type);
@@ -76,7 +76,7 @@
 
     // Create and configure function
     NEWarpAffine warp_affine;
-    warp_affine.configure(&src, &dst, matrix.data(), policy, border_mode, constant_border_value);
+    warp_affine.configure(&src, &dst, matrix, policy, border_mode, constant_border_value);
 
     // Validate valid region
     const ValidRegion valid_region = shape_to_valid_region(shape);
diff --git a/tests/validation/NEON/WarpPerspective.cpp b/tests/validation/NEON/WarpPerspective.cpp
index 804c080..6ec8bc2 100644
--- a/tests/validation/NEON/WarpPerspective.cpp
+++ b/tests/validation/NEON/WarpPerspective.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -78,7 +78,7 @@
 
     // Create and configure function
     NEWarpPerspective warp_perspective;
-    warp_perspective.configure(&src, &dst, matrix.data(), policy, border_mode, constant_border_value);
+    warp_perspective.configure(&src, &dst, matrix, policy, border_mode, constant_border_value);
 
     // Validate valid region
     const ValidRegion valid_region = shape_to_valid_region(shape);
diff --git a/tests/validation/fixtures/WarpAffineFixture.h b/tests/validation/fixtures/WarpAffineFixture.h
index c027072a..3cbf86f 100644
--- a/tests/validation/fixtures/WarpAffineFixture.h
+++ b/tests/validation/fixtures/WarpAffineFixture.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -55,11 +55,11 @@
         uint8_t                                constant_border_value = distribution_u8(gen);
 
         // Create the matrix
-        std::array<float, 6> matrix{ {} };
-        fill_warp_matrix<6>(matrix);
+        std::array<float, 9> matrix{ {} };
+        fill_warp_matrix<9>(matrix);
 
-        _target    = compute_target(shape, data_type, matrix.data(), policy, border_mode, constant_border_value);
-        _reference = compute_reference(shape, data_type, matrix.data(), policy, border_mode, constant_border_value);
+        _target    = compute_target(shape, data_type, matrix, policy, border_mode, constant_border_value);
+        _reference = compute_reference(shape, data_type, matrix, policy, border_mode, constant_border_value);
     }
 
 protected:
@@ -69,7 +69,7 @@
         library->fill_tensor_uniform(tensor, 0);
     }
 
-    TensorType compute_target(const TensorShape &shape, DataType data_type, const float *matrix, InterpolationPolicy policy, BorderMode border_mode, uint8_t constant_border_value)
+    TensorType compute_target(const TensorShape &shape, DataType data_type, const std::array<float, 9> &matrix, InterpolationPolicy policy, BorderMode border_mode, uint8_t constant_border_value)
     {
         // Create tensors
         TensorType src = create_tensor<TensorType>(shape, data_type);
@@ -97,7 +97,7 @@
         return dst;
     }
 
-    SimpleTensor<T> compute_reference(const TensorShape &shape, DataType data_type, const float *matrix, InterpolationPolicy policy, BorderMode border_mode, uint8_t constant_border_value)
+    SimpleTensor<T> compute_reference(const TensorShape &shape, DataType data_type, const std::array<float, 9> &matrix, InterpolationPolicy policy, BorderMode border_mode, uint8_t constant_border_value)
     {
         // Create reference
         SimpleTensor<T> src{ shape, data_type };
@@ -108,7 +108,7 @@
         // Fill reference
         fill(src);
 
-        return reference::warp_affine<T>(src, _valid_mask, matrix, policy, border_mode, constant_border_value);
+        return reference::warp_affine<T>(src, _valid_mask, matrix.data(), policy, border_mode, constant_border_value);
     }
 
     TensorType      _target{};
diff --git a/tests/validation/fixtures/WarpPerspectiveFixture.h b/tests/validation/fixtures/WarpPerspectiveFixture.h
index c804fa6..0eba97c 100644
--- a/tests/validation/fixtures/WarpPerspectiveFixture.h
+++ b/tests/validation/fixtures/WarpPerspectiveFixture.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -64,8 +64,8 @@
         std::array<float, 9> matrix = { { 0 } };
         fill_warp_matrix<9>(matrix);
 
-        _target    = compute_target(input_shape, vmask_shape, matrix.data(), policy, border_mode, constant_border_value, data_type);
-        _reference = compute_reference(input_shape, vmask_shape, matrix.data(), policy, border_mode, constant_border_value, data_type);
+        _target    = compute_target(input_shape, vmask_shape, matrix, policy, border_mode, constant_border_value, data_type);
+        _reference = compute_reference(input_shape, vmask_shape, matrix, policy, border_mode, constant_border_value, data_type);
     }
 
 protected:
@@ -75,7 +75,8 @@
         library->fill_tensor_uniform(tensor, 0);
     }
 
-    TensorType compute_target(const TensorShape &shape, const TensorShape &vmask_shape, const float *matrix, InterpolationPolicy policy, BorderMode border_mode, uint8_t constant_border_value,
+    TensorType compute_target(const TensorShape &shape, const TensorShape &vmask_shape, const std::array<float, 9> &matrix, InterpolationPolicy policy, BorderMode border_mode,
+                              uint8_t  constant_border_value,
                               DataType data_type)
     {
         // Create tensors
@@ -105,7 +106,8 @@
         return dst;
     }
 
-    SimpleTensor<T> compute_reference(const TensorShape &shape, const TensorShape &vmask_shape, const float *matrix, InterpolationPolicy policy, BorderMode border_mode, uint8_t constant_border_value,
+    SimpleTensor<T> compute_reference(const TensorShape &shape, const TensorShape &vmask_shape, const std::array<float, 9> &matrix, InterpolationPolicy policy, BorderMode border_mode,
+                                      uint8_t  constant_border_value,
                                       DataType data_type)
     {
         ARM_COMPUTE_ERROR_ON(data_type != DataType::U8);
@@ -120,7 +122,7 @@
         fill(src);
 
         // Compute reference
-        return reference::warp_perspective<T>(src, _valid_mask, matrix, policy, border_mode, constant_border_value);
+        return reference::warp_perspective<T>(src, _valid_mask, matrix.data(), policy, border_mode, constant_border_value);
     }
 
     TensorType      _target{};