fixed bug #2331
authorVadim Pisarevsky <vadim.pisarevsky@itseez.com>
Tue, 4 Sep 2012 09:34:52 +0000 (13:34 +0400)
committerVadim Pisarevsky <vadim.pisarevsky@itseez.com>
Tue, 4 Sep 2012 09:34:52 +0000 (13:34 +0400)
modules/core/src/copy.cpp
modules/core/test/test_operations.cpp

index 84bc224..84732e3 100644 (file)
@@ -209,6 +209,7 @@ void Mat::copyTo( OutputArray _dst ) const
     int dtype = _dst.type();
     if( _dst.fixedType() && dtype != type() )
     {
+        CV_Assert( channels() == CV_MAT_CN(dtype) );
         convertTo( _dst, dtype );
         return;
     }
index 86a90c8..6b5f6e0 100644 (file)
@@ -766,6 +766,19 @@ bool CV_OperationsTest::TestTemplateMat()
         Mat c = (a*b.t()).t();
         CV_Assert( norm(c, CV_L1) == 4. );
         }
+        
+        bool badarg_catched = false;
+        try
+        {
+            Mat m1 = Mat::zeros(1, 10, CV_8UC1);
+            Mat m2 = Mat::zeros(10, 10, CV_8UC3);
+            m1.copyTo(m2.row(1));
+        }
+        catch(const Exception& e)
+        {
+            badarg_catched = true;
+        }
+        CV_Assert( badarg_catched );
     }
     catch (const test_excep& e)
     {