From 9948ed88b04f914e65fed9222eba064d3556cc79 Mon Sep 17 00:00:00 2001
From: Vadim Pisarevsky <no@email>
Date: Sat, 4 Dec 2010 15:31:42 +0000
Subject: [PATCH] fixed crash in cvDrawContours when abs(maxLevel) is too big

---
 modules/core/src/drawing.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/modules/core/src/drawing.cpp b/modules/core/src/drawing.cpp
index c8fbc3c53..56cac1515 100644
--- a/modules/core/src/drawing.cpp
+++ b/modules/core/src/drawing.cpp
@@ -2033,12 +2033,14 @@ cvDrawContours( void* _img, CvSeq* contour,
     scalarToRawData( externalColor, ext_buf, img.type(), 0 );
     scalarToRawData( holeColor, hole_buf, img.type(), 0 );
 
+    maxLevel = MAX(maxLevel, INT_MIN-2);
+    maxLevel = MIN(maxLevel, INT_MAX-1);
+    
     if( maxLevel < 0 )
     {
         h_next = contour->h_next;
         contour->h_next = 0;
         maxLevel = -maxLevel+1;
-        maxLevel -= maxLevel < 0;
     }
 
     cvInitTreeNodeIterator( &iterator, contour, maxLevel );