issue 4457
authorAlexander Alekhin <alexander.alekhin@itseez.com>
Thu, 2 Jul 2015 12:10:12 +0000 (15:10 +0300)
committerAlexander Alekhin <alexander.alekhin@itseez.com>
Wed, 8 Jul 2015 13:22:58 +0000 (16:22 +0300)
modules/core/include/opencv2/core/mat.inl.hpp
modules/core/test/test_mat.cpp

index 64d4087..ba52efd 100644 (file)
@@ -397,6 +397,8 @@ Mat::Mat(int _rows, int _cols, int _type, void* _data, size_t _step)
       data((uchar*)_data), datastart((uchar*)_data), dataend(0), datalimit(0),
       allocator(0), u(0), size(&rows)
 {
+    CV_Assert(total() == 0 || data != NULL);
+
     size_t esz = CV_ELEM_SIZE(_type), esz1 = CV_ELEM_SIZE1(_type);
     size_t minstep = cols * esz;
     if( _step == AUTO_STEP )
@@ -428,6 +430,8 @@ Mat::Mat(Size _sz, int _type, void* _data, size_t _step)
       data((uchar*)_data), datastart((uchar*)_data), dataend(0), datalimit(0),
       allocator(0), u(0), size(&rows)
 {
+    CV_Assert(total() == 0 || data != NULL);
+
     size_t esz = CV_ELEM_SIZE(_type), esz1 = CV_ELEM_SIZE1(_type);
     size_t minstep = cols*esz;
     if( _step == AUTO_STEP )
index 00a99d8..e2d4e8a 100644 (file)
@@ -1178,6 +1178,11 @@ TEST(Core_IOArray, submat_create)
     EXPECT_THROW( OutputArray_create2(A.row(0)), cv::Exception );
 }
 
+TEST(Core_Mat, issue4457_pass_null_ptr)
+{
+    ASSERT_ANY_THROW(cv::Mat mask(45, 45, CV_32F, 0));
+}
+
 TEST(Core_Mat, reshape_1942)
 {
     cv::Mat A = (cv::Mat_<float>(2,3) << 3.4884074, 1.4159607, 0.78737736,  2.3456569, -0.88010466, 0.3009364);