[opencv] 12/89: Merge pull request #7452 from reunanen:issue-7409-2.4
Nobuhiro Iwamatsu
iwamatsu at moszumanska.debian.org
Sat May 13 09:57:20 UTC 2017
This is an automated email from the git hooks/post-receive script.
iwamatsu pushed a commit to annotated tag 2.4.13.2
in repository opencv.
commit 4e7f28811c1503e431a91d790d4998e63e80753d
Author: Juha Reunanen <juha.reunanen at gmail.com>
Date: Wed Oct 12 10:37:07 2016 +0300
Merge pull request #7452 from reunanen:issue-7409-2.4
Fix findContours crash for very large images (v2.4)
* Cast step to size_t in order to avoid integer overflow when processing very large images
* Change assert to CV_Assert
---
modules/imgproc/src/contours.cpp | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/modules/imgproc/src/contours.cpp b/modules/imgproc/src/contours.cpp
index 3042142..8d1ec9b 100644
--- a/modules/imgproc/src/contours.cpp
+++ b/modules/imgproc/src/contours.cpp
@@ -284,10 +284,13 @@ cvStartFindContours( void* _img, CvMemStorage* storage,
scanner->cinfo_storage );
}
+ CV_Assert(step >= 0);
+ CV_Assert(size.height >= 1);
+
/* make zero borders */
int esz = CV_ELEM_SIZE(mat->type);
memset( img, 0, size.width*esz );
- memset( img + step * (size.height - 1), 0, size.width*esz );
+ memset( img + static_cast<size_t>(step) * (size.height - 1), 0, size.width*esz );
img += step;
for( int y = 1; y < size.height - 1; y++, img += step )
@@ -989,6 +992,8 @@ cvFindNextContour( CvContourScanner scanner )
{
if( !scanner )
CV_Error( CV_StsNullPtr, "" );
+ CV_Assert(scanner->img_step >= 0);
+
icvEndProcessContour( scanner );
/* initialize local state */
@@ -1063,7 +1068,7 @@ cvFindNextContour( CvContourScanner scanner )
is_hole = 1;
}
- if( mode == 0 && (is_hole || img0[lnbd.y * step + lnbd.x] > 0) )
+ if( mode == 0 && (is_hole || img0[lnbd.y * static_cast<size_t>(step) + lnbd.x] > 0) )
goto resume_scan;
origin.y = y;
@@ -1077,8 +1082,8 @@ cvFindNextContour( CvContourScanner scanner )
else
{
int lval = (img0_i ?
- img0_i[lnbd.y * step_i + lnbd.x] :
- (int)img0[lnbd.y * step + lnbd.x]) & 0x7f;
+ img0_i[lnbd.y * static_cast<size_t>(step_i) + lnbd.x] :
+ (int)img0[lnbd.y * static_cast<size_t>(step) + lnbd.x]) & 0x7f;
_CvContourInfo *cur = scanner->cinfo_table[lval];
/* find the first bounding contour */
@@ -1090,11 +1095,11 @@ cvFindNextContour( CvContourScanner scanner )
if( par_info )
{
if( (img0_i &&
- icvTraceContour_32s( img0_i + par_info->origin.y * step_i +
+ icvTraceContour_32s( img0_i + par_info->origin.y * static_cast<size_t>(step_i) +
par_info->origin.x, step_i, img_i + lnbd.x,
par_info->is_hole ) > 0) ||
(!img0_i &&
- icvTraceContour( img0 + par_info->origin.y * step +
+ icvTraceContour( img0 + par_info->origin.y * static_cast<size_t>(step) +
par_info->origin.x, step, img + lnbd.x,
par_info->is_hole ) > 0) )
break;
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/opencv.git
More information about the debian-science-commits
mailing list