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 --- src/core/CL/kernels/CLWarpAffineKernel.cpp | 10 +++++----- src/core/CL/kernels/CLWarpPerspectiveKernel.cpp | 10 +++++----- src/core/NEON/kernels/NEWarpKernel.cpp | 7 +++---- src/runtime/CL/functions/CLWarpAffine.cpp | 4 ++-- src/runtime/CL/functions/CLWarpPerspective.cpp | 4 ++-- src/runtime/NEON/functions/NEWarpAffine.cpp | 5 ++--- src/runtime/NEON/functions/NEWarpPerspective.cpp | 5 ++--- 7 files changed, 21 insertions(+), 24 deletions(-) (limited to 'src') diff --git a/src/core/CL/kernels/CLWarpAffineKernel.cpp b/src/core/CL/kernels/CLWarpAffineKernel.cpp index be095f2c34..e0e09400af 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 @@ using namespace arm_compute; namespace { -void options_add_matrix(std::set &options, const float *matrix, size_t size) +void options_add_matrix(std::set &options, const std::array &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 @@ BorderSize CLWarpAffineKernel::border_size() const 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 &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 @@ void CLWarpAffineKernel::configure(const ICLTensor *input, ICLTensor *output, co // Create build options std::set 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 a47952fc6b..d6fcb09658 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 @@ using namespace arm_compute; namespace { -inline void options_add_matrix(std::set &options, const float *matrix, size_t size) +inline void options_add_matrix(std::set &options, const std::array &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 @@ BorderSize CLWarpPerspectiveKernel::border_size() const 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 &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 @@ void CLWarpPerspectiveKernel::configure(const ICLTensor *input, ICLTensor *outpu // Create build options std::set 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 0fa8278fe3..d04bc07d3a 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 @@ inline uint8_t nearest_interpolation(const uint8_t *in_ptr, int x, int y, size_t } // 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 @@ void INEWarpKernel::run(const Window &window, const ThreadInfo &info) (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 &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; diff --git a/src/runtime/CL/functions/CLWarpAffine.cpp b/src/runtime/CL/functions/CLWarpAffine.cpp index f785c75a72..4286cf6ec3 100644 --- a/src/runtime/CL/functions/CLWarpAffine.cpp +++ b/src/runtime/CL/functions/CLWarpAffine.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2017 ARM Limited. + * Copyright (c) 2016-2018 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -31,7 +31,7 @@ using namespace arm_compute; -void CLWarpAffine::configure(ICLTensor *input, ICLTensor *output, const float *matrix, InterpolationPolicy policy, BorderMode border_mode, uint8_t constant_border_value) +void CLWarpAffine::configure(ICLTensor *input, ICLTensor *output, const std::array &matrix, InterpolationPolicy policy, BorderMode border_mode, uint8_t constant_border_value) { auto k = arm_compute::support::cpp14::make_unique(); k->configure(input, output, matrix, policy); diff --git a/src/runtime/CL/functions/CLWarpPerspective.cpp b/src/runtime/CL/functions/CLWarpPerspective.cpp index b445b3b9c5..4603ee084e 100644 --- a/src/runtime/CL/functions/CLWarpPerspective.cpp +++ b/src/runtime/CL/functions/CLWarpPerspective.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2017 ARM Limited. + * Copyright (c) 2016-2018 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -31,7 +31,7 @@ using namespace arm_compute; -void CLWarpPerspective::configure(ICLTensor *input, ICLTensor *output, const float *matrix, InterpolationPolicy policy, BorderMode border_mode, uint8_t constant_border_value) +void CLWarpPerspective::configure(ICLTensor *input, ICLTensor *output, const std::array &matrix, InterpolationPolicy policy, BorderMode border_mode, uint8_t constant_border_value) { auto k = arm_compute::support::cpp14::make_unique(); k->configure(input, output, matrix, policy); diff --git a/src/runtime/NEON/functions/NEWarpAffine.cpp b/src/runtime/NEON/functions/NEWarpAffine.cpp index 889d827ed0..105646c114 100644 --- a/src/runtime/NEON/functions/NEWarpAffine.cpp +++ b/src/runtime/NEON/functions/NEWarpAffine.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2017 ARM Limited. + * Copyright (c) 2016-2018 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -32,11 +32,10 @@ using namespace arm_compute; -void NEWarpAffine::configure(ITensor *input, ITensor *output, const float *matrix, InterpolationPolicy policy, BorderMode border_mode, uint8_t constant_border_value) +void NEWarpAffine::configure(ITensor *input, ITensor *output, const std::array &matrix, InterpolationPolicy policy, 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); switch(policy) { diff --git a/src/runtime/NEON/functions/NEWarpPerspective.cpp b/src/runtime/NEON/functions/NEWarpPerspective.cpp index ed5d6a0d27..80b97ceafa 100644 --- a/src/runtime/NEON/functions/NEWarpPerspective.cpp +++ b/src/runtime/NEON/functions/NEWarpPerspective.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2017 ARM Limited. + * Copyright (c) 2016-2018 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -32,11 +32,10 @@ using namespace arm_compute; -void NEWarpPerspective::configure(ITensor *input, ITensor *output, const float *matrix, InterpolationPolicy policy, BorderMode border_mode, uint8_t constant_border_value) +void NEWarpPerspective::configure(ITensor *input, ITensor *output, const std::array &matrix, InterpolationPolicy policy, 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); switch(policy) { -- cgit v1.2.1