File opencv-imgcodecs-replace-assert-add-overflow-checks.patch of Package opencv.8179

diff --git a/modules/imgcodecs/src/bitstrm.cpp b/modules/imgcodecs/src/bitstrm.cpp
index 81829c4..ad6f947 100644
--- a/modules/imgcodecs/src/bitstrm.cpp
+++ b/modules/imgcodecs/src/bitstrm.cpp
@@ -42,6 +42,7 @@
 
 #include "precomp.hpp"
 #include "bitstrm.hpp"
+#include "utils.hpp"
 
 namespace cv
 {
@@ -164,7 +165,7 @@ void  RBaseStream::release()
 
 void  RBaseStream::setPos( int pos )
 {
-    assert( isOpened() && pos >= 0 );
+    CV_Assert(isOpened() && pos >= 0);
 
     if( !m_file )
     {
@@ -181,14 +182,19 @@ void  RBaseStream::setPos( int pos )
 
 int  RBaseStream::getPos()
 {
-    assert( isOpened() );
-    return m_block_pos + (int)(m_current - m_start);
+    CV_Assert(isOpened());
+    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 )
 {
-    assert( bytes >= 0 );
+    CV_Assert(bytes >= 0);
+    uchar* old = m_current;
     m_current += bytes;
+    CV_Assert(m_current >= old);  // overflow check
 }
 
 /////////////////////////  RLByteStream ////////////////////////////
@@ -220,7 +226,7 @@ int RLByteStream::getBytes( void* buffer, int count )
 {
     uchar*  data = (uchar*)buffer;
     int readed = 0;
-    assert( count >= 0 );
+    CV_Assert(count >= 0);
 
     while( count > 0 )
     {
@@ -371,7 +377,7 @@ void  WBaseStream::writeBlock()
 {
     int size = (int)(m_current - m_start);
 
-    assert( isOpened() );
+    CV_Assert(isOpened());
     if( size == 0 )
         return;
 
@@ -442,7 +448,7 @@ void  WBaseStream::release()
 
 int  WBaseStream::getPos()
 {
-    assert( isOpened() );
+    CV_Assert(isOpened());
     return m_block_pos + (int)(m_current - m_start);
 }
 
@@ -465,7 +471,7 @@ void WLByteStream::putBytes( const void* buffer, int count )
 {
     uchar* data = (uchar*)buffer;
 
-    assert( data && m_current && count >= 0 );
+    CV_Assert(data && m_current && count >= 0);
 
     while( count )
     {
diff --git a/modules/imgcodecs/src/grfmt_bmp.cpp b/modules/imgcodecs/src/grfmt_bmp.cpp
index e53ae13..0d6156e 100644
--- a/modules/imgcodecs/src/grfmt_bmp.cpp
+++ b/modules/imgcodecs/src/grfmt_bmp.cpp
@@ -92,6 +92,7 @@ bool  BmpDecoder::readHeader()
         m_offset = m_strm.getDWord();
 
         int  size = m_strm.getDWord();
+		CV_Assert(size > 0); // overflow, 2Gb limit
 
         if( size >= 36 )
         {
diff --git a/modules/imgcodecs/src/grfmt_sunras.cpp b/modules/imgcodecs/src/grfmt_sunras.cpp
index 97e1812..97e51fd 100644
--- a/modules/imgcodecs/src/grfmt_sunras.cpp
+++ b/modules/imgcodecs/src/grfmt_sunras.cpp
@@ -120,7 +120,7 @@ bool  SunRasterDecoder::readHeader()
                     m_type = IsColorPalette( m_palette, m_bpp ) ? CV_8UC3 : CV_8UC1;
                     m_offset = m_strm.getPos();
 
-                    assert( m_offset == 32 + m_maplength );
+                    CV_Assert(m_offset == 32 + m_maplength);
                     result = true;
                 }
             }
@@ -133,7 +133,7 @@ bool  SunRasterDecoder::readHeader()
 
                 m_offset = m_strm.getPos();
 
-                assert( m_offset == 32 + m_maplength );
+                CV_Assert(m_offset == 32 + m_maplength);
                 result = true;
             }
         }
@@ -226,7 +226,7 @@ bool  SunRasterDecoder::readData( Mat& img )
                         code = m_strm.getByte();
                         if( len > line_end - tsrc )
                         {
-                            assert(0);
+                            CV_Error(Error::StsInternal, "");
                             goto bad_decoding_1bpp;
                         }
 
@@ -367,7 +367,7 @@ bad_decoding_end:
             result = true;
             break;
         default:
-            assert(0);
+            CV_Error(Error::StsInternal, "");
         }
     }
     catch( ... )
diff --git a/modules/imgcodecs/src/utils.cpp b/modules/imgcodecs/src/utils.cpp
index f7c38d6..9c48336 100644
--- a/modules/imgcodecs/src/utils.cpp
+++ b/modules/imgcodecs/src/utils.cpp
@@ -668,7 +668,7 @@ cvConvertImage( const CvArr* srcarr, CvArr* dstarr, int flags )
             icvCvt_BGR2Gray_8u_C3C1R( s, s_step, d, d_step, size, swap_rb );
             break;
         case 33:
-            assert( swap_rb );
+            CV_Assert(swap_rb);
             icvCvt_RGB2BGR_8u_C3R( s, s_step, d, d_step, size );
             break;
         case 41:
openSUSE Build Service is sponsored by