Fix stack corruption in cvConvexHull2 and heap corruption in OutputArray::create

pull/747/head
Andrey Kamaev 12 years ago
parent b28f594917
commit 605382562d
  1. 6
      modules/core/src/matrix.cpp
  2. 3
      modules/imgproc/src/convhull.cpp

@ -1548,10 +1548,10 @@ void _OutputArray::create(int dims, const int* sizes, int mtype, int i, bool all
int _type = CV_MAT_TYPE(flags); int _type = CV_MAT_TYPE(flags);
for( size_t j = len0; j < len; j++ ) for( size_t j = len0; j < len; j++ )
{ {
if( v[i].type() == _type ) if( v[j].type() == _type )
continue; continue;
CV_Assert( v[i].empty() ); CV_Assert( v[j].empty() );
v[i].flags = (v[i].flags & ~CV_MAT_TYPE_MASK) | _type; v[j].flags = (v[j].flags & ~CV_MAT_TYPE_MASK) | _type;
} }
} }
return; return;

@ -455,7 +455,7 @@ cvConvexHull2( const CvArr* array, void* hull_storage,
hullseq = cvMakeSeqHeaderForArray( hullseq = cvMakeSeqHeaderForArray(
CV_SEQ_KIND_CURVE|CV_MAT_TYPE(mat->type)|CV_SEQ_FLAG_CLOSED, 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 ); mat->cols + mat->rows - 1, &hull_header, &hullblock );
cvClearSeq( hullseq ); cvClearSeq( hullseq );
} }
@ -475,6 +475,7 @@ cvConvexHull2( const CvArr* array, void* hull_storage,
cv::convexHull(cv::cvarrToMat(ptseq, false, false, 0, &_ptbuf), h0, cv::convexHull(cv::cvarrToMat(ptseq, false, false, 0, &_ptbuf), h0,
orientation == CV_CLOCKWISE, CV_MAT_CN(hulltype) == 2); orientation == CV_CLOCKWISE, CV_MAT_CN(hulltype) == 2);
if( hulltype == CV_SEQ_ELTYPE_PPOINT ) if( hulltype == CV_SEQ_ELTYPE_PPOINT )
{ {
const int* idx = h0.ptr<int>(); const int* idx = h0.ptr<int>();

Loading…
Cancel
Save