Commit 7763b58a authored by Alexander Alekhin's avatar Alexander Alekhin

Merge pull request #10563 from alalek:issue_10540

parents 6f8be3f6 8a76fada
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
#include "precomp.hpp" #include "precomp.hpp"
#include "bitstrm.hpp" #include "bitstrm.hpp"
#include "utils.hpp"
namespace cv namespace cv
{ {
...@@ -165,7 +166,7 @@ void RBaseStream::release() ...@@ -165,7 +166,7 @@ void RBaseStream::release()
void RBaseStream::setPos( int pos ) void RBaseStream::setPos( int pos )
{ {
assert( isOpened() && pos >= 0 ); CV_Assert(isOpened() && pos >= 0);
if( !m_file ) if( !m_file )
{ {
...@@ -182,14 +183,19 @@ void RBaseStream::setPos( int pos ) ...@@ -182,14 +183,19 @@ void RBaseStream::setPos( int pos )
int RBaseStream::getPos() int RBaseStream::getPos()
{ {
assert( isOpened() ); CV_Assert(isOpened());
return m_block_pos + (int)(m_current - m_start); int pos = validateToInt((m_current - m_start) + m_block_pos);
CV_Assert(pos >= m_block_pos); // overflow check
CV_Assert(pos >= 0); // overflow check
return pos;
} }
void RBaseStream::skip( int bytes ) void RBaseStream::skip( int bytes )
{ {
assert( bytes >= 0 ); CV_Assert(bytes >= 0);
uchar* old = m_current;
m_current += bytes; m_current += bytes;
CV_Assert(m_current >= old); // overflow check
} }
///////////////////////// RLByteStream //////////////////////////// ///////////////////////// RLByteStream ////////////////////////////
...@@ -221,7 +227,7 @@ int RLByteStream::getBytes( void* buffer, int count ) ...@@ -221,7 +227,7 @@ int RLByteStream::getBytes( void* buffer, int count )
{ {
uchar* data = (uchar*)buffer; uchar* data = (uchar*)buffer;
int readed = 0; int readed = 0;
assert( count >= 0 ); CV_Assert(count >= 0);
while( count > 0 ) while( count > 0 )
{ {
...@@ -373,7 +379,7 @@ void WBaseStream::writeBlock() ...@@ -373,7 +379,7 @@ void WBaseStream::writeBlock()
{ {
int size = (int)(m_current - m_start); int size = (int)(m_current - m_start);
assert( isOpened() ); CV_Assert(isOpened());
if( size == 0 ) if( size == 0 )
return; return;
...@@ -444,7 +450,7 @@ void WBaseStream::release() ...@@ -444,7 +450,7 @@ void WBaseStream::release()
int WBaseStream::getPos() int WBaseStream::getPos()
{ {
assert( isOpened() ); CV_Assert(isOpened());
return m_block_pos + (int)(m_current - m_start); return m_block_pos + (int)(m_current - m_start);
} }
...@@ -467,7 +473,7 @@ void WLByteStream::putBytes( const void* buffer, int count ) ...@@ -467,7 +473,7 @@ void WLByteStream::putBytes( const void* buffer, int count )
{ {
uchar* data = (uchar*)buffer; uchar* data = (uchar*)buffer;
assert( data && m_current && count >= 0 ); CV_Assert(data && m_current && count >= 0);
while( count ) while( count )
{ {
......
...@@ -95,6 +95,7 @@ bool BmpDecoder::readHeader() ...@@ -95,6 +95,7 @@ bool BmpDecoder::readHeader()
m_offset = m_strm.getDWord(); m_offset = m_strm.getDWord();
int size = m_strm.getDWord(); int size = m_strm.getDWord();
CV_Assert(size > 0); // overflow, 2Gb limit
if( size >= 36 ) if( size >= 36 )
{ {
......
...@@ -53,6 +53,8 @@ ...@@ -53,6 +53,8 @@
#include "utils.hpp" #include "utils.hpp"
#include "grfmt_pam.hpp" #include "grfmt_pam.hpp"
using namespace cv;
/* the PAM related fields */ /* the PAM related fields */
#define MAX_PAM_HEADER_IDENITFIER_LENGTH 8 #define MAX_PAM_HEADER_IDENITFIER_LENGTH 8
#define MAX_PAM_HEADER_VALUE_LENGTH 255 #define MAX_PAM_HEADER_VALUE_LENGTH 255
...@@ -184,7 +186,7 @@ basic_conversion (void *src, const struct channel_layout *layout, int src_sampe_ ...@@ -184,7 +186,7 @@ basic_conversion (void *src, const struct channel_layout *layout, int src_sampe_
} }
break; break;
default: default:
assert (0); CV_Error(Error::StsInternal, "");
} }
break; break;
} }
...@@ -205,12 +207,12 @@ basic_conversion (void *src, const struct channel_layout *layout, int src_sampe_ ...@@ -205,12 +207,12 @@ basic_conversion (void *src, const struct channel_layout *layout, int src_sampe_
} }
break; break;
default: default:
assert (0); CV_Error(Error::StsInternal, "");
} }
break; break;
} }
default: default:
assert (0); CV_Error(Error::StsInternal, "");
} }
} }
...@@ -711,7 +713,7 @@ bool PAMEncoder::write( const Mat& img, const std::vector<int>& params ) ...@@ -711,7 +713,7 @@ bool PAMEncoder::write( const Mat& img, const std::vector<int>& params )
} else } else
strm.putBytes( data, stride*height ); strm.putBytes( data, stride*height );
} else } else
assert (0); CV_Error(Error::StsInternal, "");
strm.close(); strm.close();
return true; return true;
......
...@@ -124,7 +124,7 @@ bool SunRasterDecoder::readHeader() ...@@ -124,7 +124,7 @@ bool SunRasterDecoder::readHeader()
m_type = IsColorPalette( m_palette, m_bpp ) ? CV_8UC3 : CV_8UC1; m_type = IsColorPalette( m_palette, m_bpp ) ? CV_8UC3 : CV_8UC1;
m_offset = m_strm.getPos(); m_offset = m_strm.getPos();
assert( m_offset == 32 + m_maplength ); CV_Assert(m_offset == 32 + m_maplength);
result = true; result = true;
} }
} }
...@@ -137,7 +137,7 @@ bool SunRasterDecoder::readHeader() ...@@ -137,7 +137,7 @@ bool SunRasterDecoder::readHeader()
m_offset = m_strm.getPos(); m_offset = m_strm.getPos();
assert( m_offset == 32 + m_maplength ); CV_Assert(m_offset == 32 + m_maplength);
result = true; result = true;
} }
} }
...@@ -230,7 +230,7 @@ bool SunRasterDecoder::readData( Mat& img ) ...@@ -230,7 +230,7 @@ bool SunRasterDecoder::readData( Mat& img )
code = m_strm.getByte(); code = m_strm.getByte();
if( len > line_end - tsrc ) if( len > line_end - tsrc )
{ {
assert(0); CV_Error(Error::StsInternal, "");
goto bad_decoding_1bpp; goto bad_decoding_1bpp;
} }
...@@ -371,7 +371,7 @@ bad_decoding_end: ...@@ -371,7 +371,7 @@ bad_decoding_end:
result = true; result = true;
break; break;
default: default:
assert(0); CV_Error(Error::StsInternal, "");
} }
} }
CV_CATCH_ALL CV_CATCH_ALL
......
...@@ -56,7 +56,6 @@ ...@@ -56,7 +56,6 @@
#include <string.h> #include <string.h>
#include <limits.h> #include <limits.h>
#include <ctype.h> #include <ctype.h>
#include <assert.h>
#if defined _WIN32 || defined WINCE #if defined _WIN32 || defined WINCE
#include <windows.h> #include <windows.h>
......
...@@ -670,7 +670,7 @@ cvConvertImage( const CvArr* srcarr, CvArr* dstarr, int flags ) ...@@ -670,7 +670,7 @@ cvConvertImage( const CvArr* srcarr, CvArr* dstarr, int flags )
icvCvt_BGR2Gray_8u_C3C1R( s, s_step, d, d_step, size, swap_rb ); icvCvt_BGR2Gray_8u_C3C1R( s, s_step, d, d_step, size, swap_rb );
break; break;
case 33: case 33:
assert( swap_rb ); CV_Assert(swap_rb);
icvCvt_RGB2BGR_8u_C3R( s, s_step, d, d_step, size ); icvCvt_RGB2BGR_8u_C3R( s, s_step, d, d_step, size );
break; break;
case 41: case 41:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment