提交 c0492755 编写于 作者: A Alexander Alekhin

Merge pull request #8502 from tomoaki0705:fixWarningsArrayBound

...@@ -528,6 +528,7 @@ cvSubstituteContour( CvContourScanner scanner, CvSeq * new_contour ) ...@@ -528,6 +528,7 @@ cvSubstituteContour( CvContourScanner scanner, CvSeq * new_contour )
} }
} }
static const int MAX_SIZE = 16;
/* /*
marks domain border with +/-<constant> and stores the contour into CvSeq. marks domain border with +/-<constant> and stores the contour into CvSeq.
...@@ -544,7 +545,7 @@ icvFetchContour( schar *ptr, ...@@ -544,7 +545,7 @@ icvFetchContour( schar *ptr,
int _method ) int _method )
{ {
const schar nbd = 2; const schar nbd = 2;
int deltas[16]; int deltas[MAX_SIZE];
CvSeqWriter writer; CvSeqWriter writer;
schar *i0 = ptr, *i1, *i3, *i4 = 0; schar *i0 = ptr, *i1, *i3, *i4 = 0;
int prev_s = -1, s, s_end; int prev_s = -1, s, s_end;
...@@ -588,8 +589,9 @@ icvFetchContour( schar *ptr, ...@@ -588,8 +589,9 @@ icvFetchContour( schar *ptr,
for( ;; ) for( ;; )
{ {
s_end = s; s_end = s;
s = std::min(s, MAX_SIZE - 1);
for( ;; ) while( s < MAX_SIZE - 1 )
{ {
i4 = i3 + deltas[++s]; i4 = i3 + deltas[++s];
if( *i4 != 0 ) if( *i4 != 0 )
...@@ -654,8 +656,8 @@ icvFetchContour( schar *ptr, ...@@ -654,8 +656,8 @@ icvFetchContour( schar *ptr,
static int static int
icvTraceContour( schar *ptr, int step, schar *stop_ptr, int is_hole ) icvTraceContour( schar *ptr, int step, schar *stop_ptr, int is_hole )
{ {
int deltas[16]; int deltas[MAX_SIZE];
schar *i0 = ptr, *i1, *i3, *i4; schar *i0 = ptr, *i1, *i3, *i4 = NULL;
int s, s_end; int s, s_end;
/* initialize local state */ /* initialize local state */
...@@ -682,7 +684,8 @@ icvTraceContour( schar *ptr, int step, schar *stop_ptr, int is_hole ) ...@@ -682,7 +684,8 @@ icvTraceContour( schar *ptr, int step, schar *stop_ptr, int is_hole )
for( ;; ) for( ;; )
{ {
for( ;; ) s = std::min(s, MAX_SIZE - 1);
while( s < MAX_SIZE - 1 )
{ {
i4 = i3 + deltas[++s]; i4 = i3 + deltas[++s];
if( *i4 != 0 ) if( *i4 != 0 )
...@@ -709,9 +712,9 @@ icvFetchContourEx( schar* ptr, ...@@ -709,9 +712,9 @@ icvFetchContourEx( schar* ptr,
int nbd, int nbd,
CvRect* _rect ) CvRect* _rect )
{ {
int deltas[16]; int deltas[MAX_SIZE];
CvSeqWriter writer; CvSeqWriter writer;
schar *i0 = ptr, *i1, *i3, *i4; schar *i0 = ptr, *i1, *i3, *i4 = NULL;
CvRect rect; CvRect rect;
int prev_s = -1, s, s_end; int prev_s = -1, s, s_end;
int method = _method - 1; int method = _method - 1;
...@@ -759,8 +762,9 @@ icvFetchContourEx( schar* ptr, ...@@ -759,8 +762,9 @@ icvFetchContourEx( schar* ptr,
for( ;; ) for( ;; )
{ {
s_end = s; s_end = s;
s = std::min(s, MAX_SIZE - 1);
for( ;; ) while( s < MAX_SIZE - 1 )
{ {
i4 = i3 + deltas[++s]; i4 = i3 + deltas[++s];
if( *i4 != 0 ) if( *i4 != 0 )
...@@ -833,8 +837,8 @@ icvFetchContourEx( schar* ptr, ...@@ -833,8 +837,8 @@ icvFetchContourEx( schar* ptr,
static int static int
icvTraceContour_32s( int *ptr, int step, int *stop_ptr, int is_hole ) icvTraceContour_32s( int *ptr, int step, int *stop_ptr, int is_hole )
{ {
int deltas[16]; int deltas[MAX_SIZE];
int *i0 = ptr, *i1, *i3, *i4; int *i0 = ptr, *i1, *i3, *i4 = NULL;
int s, s_end; int s, s_end;
const int right_flag = INT_MIN; const int right_flag = INT_MIN;
const int new_flag = (int)((unsigned)INT_MIN >> 1); 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 ) ...@@ -863,8 +867,9 @@ icvTraceContour_32s( int *ptr, int step, int *stop_ptr, int is_hole )
for( ;; ) for( ;; )
{ {
s_end = s; s_end = s;
s = std::min(s, MAX_SIZE - 1);
for( ;; ) while( s < MAX_SIZE - 1 )
{ {
i4 = i3 + deltas[++s]; i4 = i3 + deltas[++s];
if( (*i4 & value_mask) == ccomp_val ) if( (*i4 & value_mask) == ccomp_val )
...@@ -890,7 +895,7 @@ icvFetchContourEx_32s( int* ptr, ...@@ -890,7 +895,7 @@ icvFetchContourEx_32s( int* ptr,
int _method, int _method,
CvRect* _rect ) CvRect* _rect )
{ {
int deltas[16]; int deltas[MAX_SIZE];
CvSeqWriter writer; CvSeqWriter writer;
int *i0 = ptr, *i1, *i3, *i4; int *i0 = ptr, *i1, *i3, *i4;
CvRect rect; CvRect rect;
...@@ -925,7 +930,7 @@ icvFetchContourEx_32s( int* ptr, ...@@ -925,7 +930,7 @@ icvFetchContourEx_32s( int* ptr,
s = (s - 1) & 7; s = (s - 1) & 7;
i1 = i0 + deltas[s]; i1 = i0 + deltas[s];
} }
while( (*i1 & value_mask) != ccomp_val && s != s_end ); while( (*i1 & value_mask) != ccomp_val && s != s_end && ( s < MAX_SIZE - 1 ) );
if( s == s_end ) /* single pixel domain */ if( s == s_end ) /* single pixel domain */
{ {
...@@ -945,12 +950,11 @@ icvFetchContourEx_32s( int* ptr, ...@@ -945,12 +950,11 @@ icvFetchContourEx_32s( int* ptr,
{ {
s_end = s; s_end = s;
for( ;; ) do
{ {
i4 = i3 + deltas[++s]; i4 = i3 + deltas[++s];
if( (*i4 & value_mask) == ccomp_val )
break;
} }
while( (*i4 & value_mask) != ccomp_val && ( s < MAX_SIZE - 1 ) );
s &= 7; s &= 7;
/* check "right" bound */ /* check "right" bound */
......
...@@ -1704,10 +1704,6 @@ public: ...@@ -1704,10 +1704,6 @@ public:
CV_Assert(ksize <= MAX_ESIZE); CV_Assert(ksize <= MAX_ESIZE);
} }
#if defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 8)
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Warray-bounds"
#endif
virtual void operator() (const Range& range) const virtual void operator() (const Range& range) const
{ {
int dy, cn = src.channels(); int dy, cn = src.channels();
...@@ -1737,7 +1733,7 @@ public: ...@@ -1737,7 +1733,7 @@ public:
int sy = clip(sy0 - ksize2 + 1 + k, 0, ssize.height); int sy = clip(sy0 - ksize2 + 1 + k, 0, ssize.height);
for( k1 = std::max(k1, k); k1 < ksize; k1++ ) for( k1 = std::max(k1, k); k1 < ksize; k1++ )
{ {
if( sy == prev_sy[k1] ) // if the sy-th row has been computed already, reuse it. if( k1 < MAX_ESIZE && sy == prev_sy[k1] ) // if the sy-th row has been computed already, reuse it.
{ {
if( k1 > k ) if( k1 > k )
memcpy( rows[k], rows[k1], bufstep*sizeof(rows[0][0]) ); memcpy( rows[k], rows[k1], bufstep*sizeof(rows[0][0]) );
...@@ -1756,9 +1752,6 @@ public: ...@@ -1756,9 +1752,6 @@ public:
vresize( (const WT**)rows, (T*)(dst.data + dst.step*dy), beta, dsize.width ); vresize( (const WT**)rows, (T*)(dst.data + dst.step*dy), beta, dsize.width );
} }
} }
#if defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 8)
# pragma GCC diagnostic pop
#endif
private: private:
Mat src; Mat src;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册