matrix.cpp::setSize(): fixed out-of-bounds access on cv::Mat steps
authorMario Emmenlauer <memmenlauer@biodataanalysis.de>
Wed, 30 Sep 2020 16:16:02 +0000 (18:16 +0200)
committerMario Emmenlauer <memmenlauer@biodataanalysis.de>
Mon, 5 Oct 2020 08:19:53 +0000 (10:19 +0200)
modules/core/src/matrix.cpp

index 5e37774..fc9e4c6 100644 (file)
@@ -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 )
         {