From d8b03dd029261091e34dd8831d546299c60ce094 Mon Sep 17 00:00:00 2001 From: Pablo Tello Date: Tue, 7 Aug 2018 11:23:54 +0100 Subject: 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 Reviewed-by: Anthony Barbier --- arm_compute/core/CL/kernels/CLWarpAffineKernel.h | 7 ++++--- arm_compute/core/CL/kernels/CLWarpPerspectiveKernel.h | 4 ++-- arm_compute/core/NEON/kernels/NEWarpKernel.h | 7 ++++--- 3 files changed, 10 insertions(+), 8 deletions(-) (limited to 'arm_compute/core') diff --git a/arm_compute/core/CL/kernels/CLWarpAffineKernel.h b/arm_compute/core/CL/kernels/CLWarpAffineKernel.h index b01bebf258..cfce2ff753 100644 --- a/arm_compute/core/CL/kernels/CLWarpAffineKernel.h +++ b/arm_compute/core/CL/kernels/CLWarpAffineKernel.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2017 ARM Limited. + * Copyright (c) 2016-2018 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -39,10 +39,11 @@ public: * * @param[in] input Source tensor. Data types supported: U8. * @param[out] output Destination tensor, Data types supported: U8. - * @param[in] matrix The perspective matrix. Must be 2x3 of type float. + * @param[in] matrix The perspective matrix. Must be 2x3 of type float + * The matrix argument requires 9 values, the last 3 values are ignored. * @param[in] policy The interpolation type. */ - void configure(const ICLTensor *input, ICLTensor *output, const float *matrix, InterpolationPolicy policy); + void configure(const ICLTensor *input, ICLTensor *output, const std::array &matrix, InterpolationPolicy policy); // Inherited methods overridden: BorderSize border_size() const override; diff --git a/arm_compute/core/CL/kernels/CLWarpPerspectiveKernel.h b/arm_compute/core/CL/kernels/CLWarpPerspectiveKernel.h index 0989d523f0..febcb3d038 100644 --- a/arm_compute/core/CL/kernels/CLWarpPerspectiveKernel.h +++ b/arm_compute/core/CL/kernels/CLWarpPerspectiveKernel.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2017 ARM Limited. + * Copyright (c) 2016-2018 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -41,7 +41,7 @@ public: * @param[in] matrix The perspective matrix. Must be 3x3 of type float. * @param[in] policy The interpolation type. */ - void configure(const ICLTensor *input, ICLTensor *output, const float *matrix, InterpolationPolicy policy); + void configure(const ICLTensor *input, ICLTensor *output, const std::array &matrix, InterpolationPolicy policy); // Inherited methods overridden: BorderSize border_size() const override; diff --git a/arm_compute/core/NEON/kernels/NEWarpKernel.h b/arm_compute/core/NEON/kernels/NEWarpKernel.h index a147d57f28..879bc44d05 100644 --- a/arm_compute/core/NEON/kernels/NEWarpKernel.h +++ b/arm_compute/core/NEON/kernels/NEWarpKernel.h @@ -27,8 +27,8 @@ #include "arm_compute/core/NEON/INEKernel.h" #include "arm_compute/core/Types.h" +#include #include - namespace arm_compute { class ITensor; @@ -52,10 +52,11 @@ public: * @param[in] input Source tensor. Data type supported: U8. * @param[out] output Destination tensor. Data type supported: U8. * @param[in] matrix The perspective or affine matrix to use. Must be 2x3 for affine and 3x3 for perspective of type float. + * The matrix argument requires 9 values, for the affine case the last 3 values are ignored. * @param[in] border_mode Strategy to use for borders * @param[in] constant_border_value Constant value used for filling the border. */ - virtual void configure(const ITensor *input, ITensor *output, const float *matrix, BorderMode border_mode, uint8_t constant_border_value); + virtual void configure(const ITensor *input, ITensor *output, const std::array &matrix, BorderMode border_mode, uint8_t constant_border_value); // Inherited methods overridden: void run(const Window &window, const ThreadInfo &info) override; @@ -88,7 +89,7 @@ protected: const ITensor *_input; /**< Input Tensor */ ITensor *_output; /**< Output Tensor */ uint8_t _constant_border_value; /**< Constant value used for filling the border. This value is used for those pixels out of the ROI when the border mode is CONSTANT */ - const float *_matrix; /**< The affine or perspective matrix. Must be 2x3 for warp affine or 3x3 for warp perspective of type float. */ + std::array _matrix; /**< The affine or perspective matrix. Must be 2x3 for warp affine or 3x3 for warp perspective of type float. */ }; /** Template interface for the kernel to compute warp affine -- cgit v1.2.1