mirror of
https://github.com/opencv/opencv.git
synced 2026-09-19 15:23:23 -05:00
Merge pull request #26728 from vrabaud:png_behavior
Fix behavior change when PNG buffer is incomplete.
This commit is contained in:
@@ -260,7 +260,8 @@ bool PngDecoder::readHeader()
|
|||||||
|
|
||||||
if (id != id_IHDR)
|
if (id != id_IHDR)
|
||||||
{
|
{
|
||||||
read_from_io(&sig, 8, 1);
|
if (read_from_io(&sig, 8, 1) != 1)
|
||||||
|
return false;
|
||||||
id = read_chunk(m_chunkIHDR);
|
id = read_chunk(m_chunkIHDR);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -274,7 +275,7 @@ bool PngDecoder::readHeader()
|
|||||||
m_is_fcTL_loaded = false;
|
m_is_fcTL_loaded = false;
|
||||||
id = read_chunk(chunk);
|
id = read_chunk(chunk);
|
||||||
|
|
||||||
if ((m_f && feof(m_f)) || (!m_buf.empty() && m_buf_pos > m_buf.total()))
|
if (!id || (m_f && feof(m_f)) || (!m_buf.empty() && m_buf_pos > m_buf.total()))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -679,8 +680,10 @@ size_t PngDecoder::read_from_io(void* _Buffer, size_t _ElementSize, size_t _Elem
|
|||||||
if (m_f)
|
if (m_f)
|
||||||
return fread(_Buffer, _ElementSize, _ElementCount, m_f);
|
return fread(_Buffer, _ElementSize, _ElementCount, m_f);
|
||||||
|
|
||||||
if (m_buf_pos + _ElementSize > m_buf.cols * m_buf.rows * m_buf.elemSize())
|
if (m_buf_pos + _ElementSize > m_buf.cols * m_buf.rows * m_buf.elemSize()) {
|
||||||
CV_Error(Error::StsInternal, "PNG input buffer is incomplete");
|
CV_LOG_WARNING(NULL, "PNG input buffer is incomplete");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
memcpy( _Buffer, m_buf.ptr() + m_buf_pos, _ElementSize );
|
memcpy( _Buffer, m_buf.ptr() + m_buf_pos, _ElementSize );
|
||||||
m_buf_pos += _ElementSize;
|
m_buf_pos += _ElementSize;
|
||||||
|
|||||||
Reference in New Issue
Block a user