enum { XY_SHIFT = 16, XY_ONE = 1 << XY_SHIFT, DRAWING_STORAGE_BLOCK = (1<<12) - 256 };
+static const int MAX_THICKNESS = 32767;
+
struct PolyEdge
{
PolyEdge() : y0(0), y1(0), x(0), dx(0), next(0) {}
if( line_type == CV_AA && img.depth() != CV_8U )
line_type = 8;
- CV_Assert( 0 <= thickness );
+ CV_Assert( 0 <= thickness && thickness <= MAX_THICKNESS );
CV_Assert( 0 <= shift && shift <= XY_SHIFT );
double buf[4];
if( lineType == CV_AA && img.depth() != CV_8U )
lineType = 8;
+ CV_Assert( thickness <= MAX_THICKNESS );
CV_Assert( 0 <= shift && shift <= XY_SHIFT );
double buf[4];
if( line_type == CV_AA && img.depth() != CV_8U )
line_type = 8;
- CV_Assert( radius >= 0 && 0 <= shift && shift <= XY_SHIFT );
+ CV_Assert( radius >= 0 && thickness <= MAX_THICKNESS &&
+ 0 <= shift && shift <= XY_SHIFT );
double buf[4];
scalarToRawData(color, buf, img.type(), 0);
line_type = 8;
CV_Assert( axes.width >= 0 && axes.height >= 0 &&
- 0 <= shift && shift <= XY_SHIFT );
+ thickness <= MAX_THICKNESS && 0 <= shift && shift <= XY_SHIFT );
double buf[4];
scalarToRawData(color, buf, img.type(), 0);
if( lineType == CV_AA && img.depth() != CV_8U )
lineType = 8;
- CV_Assert( box.size.width >= 0 && box.size.height >= 0 );
+ CV_Assert( box.size.width >= 0 && box.size.height >= 0 &&
+ thickness <= MAX_THICKNESS );
double buf[4];
scalarToRawData(color, buf, img.type(), 0);
line_type = 8;
CV_Assert( pts && npts && ncontours >= 0 &&
- 0 <= thickness && 0 <= shift && shift <= XY_SHIFT );
+ 0 <= thickness && thickness <= MAX_THICKNESS &&
+ 0 <= shift && shift <= XY_SHIFT );
double buf[4];
scalarToRawData( color, buf, img.type(), 0 );
if( !contour )
return;
+ CV_Assert( thickness <= MAX_THICKNESS );
+
scalarToRawData( externalColor, ext_buf, img.type(), 0 );
scalarToRawData( holeColor, hole_buf, img.type(), 0 );