From e0cea92f6e90f1fa56904c181faa719d408ce333 Mon Sep 17 00:00:00 2001 From: sbokov Date: Tue, 14 Jul 2015 00:05:30 +0300 Subject: [PATCH] Fixing possible invalid memory access in validateDisparity --- modules/calib3d/src/stereosgbm.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/modules/calib3d/src/stereosgbm.cpp b/modules/calib3d/src/stereosgbm.cpp index 4b0aa5a25b..adbadd5bc8 100644 --- a/modules/calib3d/src/stereosgbm.cpp +++ b/modules/calib3d/src/stereosgbm.cpp @@ -1157,6 +1157,10 @@ void cv::validateDisparity( InputOutputArray _disp, InputArray _cost, int minDis for( x = minX1; x < maxX1; x++ ) { int d = dptr[x], c = cptr[x]; + + if( d == INVALID_DISP_SCALED ) + continue; + int x2 = x - ((d + DISP_SCALE/2) >> DISP_SHIFT); if( disp2cost[x2] > c ) @@ -1173,9 +1177,13 @@ void cv::validateDisparity( InputOutputArray _disp, InputArray _cost, int minDis for( x = minX1; x < maxX1; x++ ) { int d = dptr[x], c = cptr[x]; + + if( d == INVALID_DISP_SCALED ) + continue; + int x2 = x - ((d + DISP_SCALE/2) >> DISP_SHIFT); - if( disp2cost[x2] < c ) + if( disp2cost[x2] > c ) { disp2cost[x2] = c; disp2buf[x2] = d;