Fix stack corruption in cvConvexHull2 and heap corruption in OutputArray::create
authorAndrey Kamaev <andrey.kamaev@itseez.com>
Sun, 31 Mar 2013 09:24:36 +0000 (13:24 +0400)
committerAndrey Kamaev <andrey.kamaev@itseez.com>
Mon, 1 Apr 2013 11:24:35 +0000 (15:24 +0400)
modules/core/src/matrix.cpp
modules/imgproc/src/convhull.cpp

index 628097b..d7567b2 100644 (file)
@@ -1548,10 +1548,10 @@ void _OutputArray::create(int dims, const int* sizes, int mtype, int i, bool all
                 int _type = CV_MAT_TYPE(flags);
                 for( size_t j = len0; j < len; j++ )
                 {
-                    if( v[i].type() == _type )
+                    if( v[j].type() == _type )
                         continue;
-                    CV_Assert( v[i].empty() );
-                    v[i].flags = (v[i].flags & ~CV_MAT_TYPE_MASK) | _type;
+                    CV_Assert( v[j].empty() );
+                    v[j].flags = (v[j].flags & ~CV_MAT_TYPE_MASK) | _type;
                 }
             }
             return;
index b9e1ca0..f4f4193 100644 (file)
@@ -455,7 +455,7 @@ cvConvexHull2( const CvArr* array, void* hull_storage,
 
         hullseq = cvMakeSeqHeaderForArray(
                                           CV_SEQ_KIND_CURVE|CV_MAT_TYPE(mat->type)|CV_SEQ_FLAG_CLOSED,
-                                          sizeof(contour_header), CV_ELEM_SIZE(mat->type), mat->data.ptr,
+                                          sizeof(hull_header), CV_ELEM_SIZE(mat->type), mat->data.ptr,
                                           mat->cols + mat->rows - 1, &hull_header, &hullblock );
         cvClearSeq( hullseq );
     }
@@ -475,6 +475,7 @@ cvConvexHull2( const CvArr* array, void* hull_storage,
     cv::convexHull(cv::cvarrToMat(ptseq, false, false, 0, &_ptbuf), h0,
                    orientation == CV_CLOCKWISE, CV_MAT_CN(hulltype) == 2);
 
+
     if( hulltype == CV_SEQ_ELTYPE_PPOINT )
     {
         const int* idx = h0.ptr<int>();