Fix behavior change when PNG buffer is incomplete.

This commit is contained in:
Vincent Rabaud 2025-01-07 15:03:16 +01:00
parent e34eff9ab2
commit cb959b3915

View File

@ -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;