From 102d8f67cd957777107056be3f3d93383b71649e Mon Sep 17 00:00:00 2001 From: Mario Emmenlauer Date: Wed, 30 Sep 2020 18:16:02 +0200 Subject: [PATCH] matrix.cpp::setSize(): fixed out-of-bounds access on cv::Mat steps --- modules/core/src/matrix.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/modules/core/src/matrix.cpp b/modules/core/src/matrix.cpp index 5e37774a6a..fc9e4c69b2 100644 --- a/modules/core/src/matrix.cpp +++ b/modules/core/src/matrix.cpp @@ -237,12 +237,19 @@ void setSize( Mat& m, int _dims, const int* _sz, const size_t* _steps, bool auto if( _steps ) { - if (_steps[i] % esz1 != 0) + if (i < _dims-1) { - CV_Error(Error::BadStep, "Step must be a multiple of esz1"); - } + if (_steps[i] % esz1 != 0) + { + CV_Error_(Error::BadStep, ("Step %zu for dimension %d must be a multiple of esz1 %zu", _steps[i], i, esz1)); + } - m.step.p[i] = i < _dims-1 ? _steps[i] : esz; + m.step.p[i] = _steps[i]; + } + else + { + m.step.p[i] = esz; + } } else if( autoSteps ) { -- GitLab