diff --git a/modules/imgcodecs/src/grfmt_bmp.cpp b/modules/imgcodecs/src/grfmt_bmp.cpp index e69a93c78b..a8ca6a046a 100644 --- a/modules/imgcodecs/src/grfmt_bmp.cpp +++ b/modules/imgcodecs/src/grfmt_bmp.cpp @@ -208,7 +208,12 @@ bool BmpDecoder::readHeader() // in 32 bit case alpha channel is used - so require CV_8UC4 type m_type = iscolor ? ((m_bpp == 32 && m_rle_code != BMP_RGB) ? CV_8UC4 : CV_8UC3 ) : CV_8UC1; m_origin = m_height > 0 ? ORIGIN_BL : ORIGIN_TL; - m_height = std::abs(m_height); + if ( m_height == std::numeric_limits::min() ) { + // abs(std::numeric_limits::min()) is undefined behavior. + result = false; + } else { + m_height = std::abs(m_height); + } if( !result ) {