Skip to content

Commit 6ab10fc

Browse files
committed
suppress warnings on GCC 4.9 series
- check boundary strictly - initialize the variable before using it
1 parent b67382c commit 6ab10fc

File tree

2 files changed

+21
-24
lines changed

2 files changed

+21
-24
lines changed

modules/imgproc/src/contours.cpp

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,7 @@ cvSubstituteContour( CvContourScanner scanner, CvSeq * new_contour )
528528
}
529529
}
530530

531+
static const int MAX_SIZE = 16;
531532

532533
/*
533534
marks domain border with +/-<constant> and stores the contour into CvSeq.
@@ -544,7 +545,7 @@ icvFetchContour( schar *ptr,
544545
int _method )
545546
{
546547
const schar nbd = 2;
547-
int deltas[16];
548+
int deltas[MAX_SIZE];
548549
CvSeqWriter writer;
549550
schar *i0 = ptr, *i1, *i3, *i4 = 0;
550551
int prev_s = -1, s, s_end;
@@ -588,8 +589,9 @@ icvFetchContour( schar *ptr,
588589
for( ;; )
589590
{
590591
s_end = s;
592+
s = std::min(s, MAX_SIZE - 1);
591593

592-
for( ;; )
594+
while( s < MAX_SIZE - 1 )
593595
{
594596
i4 = i3 + deltas[++s];
595597
if( *i4 != 0 )
@@ -654,8 +656,8 @@ icvFetchContour( schar *ptr,
654656
static int
655657
icvTraceContour( schar *ptr, int step, schar *stop_ptr, int is_hole )
656658
{
657-
int deltas[16];
658-
schar *i0 = ptr, *i1, *i3, *i4;
659+
int deltas[MAX_SIZE];
660+
schar *i0 = ptr, *i1, *i3, *i4 = NULL;
659661
int s, s_end;
660662

661663
/* initialize local state */
@@ -682,7 +684,8 @@ icvTraceContour( schar *ptr, int step, schar *stop_ptr, int is_hole )
682684
for( ;; )
683685
{
684686

685-
for( ;; )
687+
s = std::min(s, MAX_SIZE - 1);
688+
while( s < MAX_SIZE - 1 )
686689
{
687690
i4 = i3 + deltas[++s];
688691
if( *i4 != 0 )
@@ -709,9 +712,9 @@ icvFetchContourEx( schar* ptr,
709712
int nbd,
710713
CvRect* _rect )
711714
{
712-
int deltas[16];
715+
int deltas[MAX_SIZE];
713716
CvSeqWriter writer;
714-
schar *i0 = ptr, *i1, *i3, *i4;
717+
schar *i0 = ptr, *i1, *i3, *i4 = NULL;
715718
CvRect rect;
716719
int prev_s = -1, s, s_end;
717720
int method = _method - 1;
@@ -759,8 +762,9 @@ icvFetchContourEx( schar* ptr,
759762
for( ;; )
760763
{
761764
s_end = s;
765+
s = std::min(s, MAX_SIZE - 1);
762766

763-
for( ;; )
767+
while( s < MAX_SIZE - 1 )
764768
{
765769
i4 = i3 + deltas[++s];
766770
if( *i4 != 0 )
@@ -833,8 +837,8 @@ icvFetchContourEx( schar* ptr,
833837
static int
834838
icvTraceContour_32s( int *ptr, int step, int *stop_ptr, int is_hole )
835839
{
836-
int deltas[16];
837-
int *i0 = ptr, *i1, *i3, *i4;
840+
int deltas[MAX_SIZE];
841+
int *i0 = ptr, *i1, *i3, *i4 = NULL;
838842
int s, s_end;
839843
const int right_flag = INT_MIN;
840844
const int new_flag = (int)((unsigned)INT_MIN >> 1);
@@ -863,8 +867,9 @@ icvTraceContour_32s( int *ptr, int step, int *stop_ptr, int is_hole )
863867
for( ;; )
864868
{
865869
s_end = s;
870+
s = std::min(s, MAX_SIZE - 1);
866871

867-
for( ;; )
872+
while( s < MAX_SIZE - 1 )
868873
{
869874
i4 = i3 + deltas[++s];
870875
if( (*i4 & value_mask) == ccomp_val )
@@ -890,7 +895,7 @@ icvFetchContourEx_32s( int* ptr,
890895
int _method,
891896
CvRect* _rect )
892897
{
893-
int deltas[16];
898+
int deltas[MAX_SIZE];
894899
CvSeqWriter writer;
895900
int *i0 = ptr, *i1, *i3, *i4;
896901
CvRect rect;
@@ -925,7 +930,7 @@ icvFetchContourEx_32s( int* ptr,
925930
s = (s - 1) & 7;
926931
i1 = i0 + deltas[s];
927932
}
928-
while( (*i1 & value_mask) != ccomp_val && s != s_end );
933+
while( (*i1 & value_mask) != ccomp_val && s != s_end && ( s < MAX_SIZE - 1 ) );
929934

930935
if( s == s_end ) /* single pixel domain */
931936
{
@@ -945,12 +950,11 @@ icvFetchContourEx_32s( int* ptr,
945950
{
946951
s_end = s;
947952

948-
for( ;; )
953+
do
949954
{
950955
i4 = i3 + deltas[++s];
951-
if( (*i4 & value_mask) == ccomp_val )
952-
break;
953956
}
957+
while( (*i4 & value_mask) != ccomp_val && ( s < MAX_SIZE - 1 ) );
954958
s &= 7;
955959

956960
/* check "right" bound */

modules/imgproc/src/imgwarp.cpp

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1704,10 +1704,6 @@ class resizeGeneric_Invoker :
17041704
CV_Assert(ksize <= MAX_ESIZE);
17051705
}
17061706

1707-
#if defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 8)
1708-
# pragma GCC diagnostic push
1709-
# pragma GCC diagnostic ignored "-Warray-bounds"
1710-
#endif
17111707
virtual void operator() (const Range& range) const
17121708
{
17131709
int dy, cn = src.channels();
@@ -1737,7 +1733,7 @@ class resizeGeneric_Invoker :
17371733
int sy = clip(sy0 - ksize2 + 1 + k, 0, ssize.height);
17381734
for( k1 = std::max(k1, k); k1 < ksize; k1++ )
17391735
{
1740-
if( sy == prev_sy[k1] ) // if the sy-th row has been computed already, reuse it.
1736+
if( k1 < MAX_ESIZE && sy == prev_sy[k1] ) // if the sy-th row has been computed already, reuse it.
17411737
{
17421738
if( k1 > k )
17431739
memcpy( rows[k], rows[k1], bufstep*sizeof(rows[0][0]) );
@@ -1756,9 +1752,6 @@ class resizeGeneric_Invoker :
17561752
vresize( (const WT**)rows, (T*)(dst.data + dst.step*dy), beta, dsize.width );
17571753
}
17581754
}
1759-
#if defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 8)
1760-
# pragma GCC diagnostic pop
1761-
#endif
17621755

17631756
private:
17641757
Mat src;

0 commit comments

Comments
 (0)