提交 c3d60a6c 编写于 作者: A Alexander Alekhin 提交者: Alexander Alekhin

imgcodecs: add runtime checks to validate input

original commits: f9b1dbe2
上级 7b92f3ce
...@@ -545,7 +545,7 @@ bool Jpeg2KOpjDecoderBase::readHeader() ...@@ -545,7 +545,7 @@ bool Jpeg2KOpjDecoderBase::readHeader()
*/ */
bool hasAlpha = false; bool hasAlpha = false;
const int numcomps = image_->numcomps; const int numcomps = image_->numcomps;
CV_Assert(numcomps >= 1); CV_Check(numcomps, numcomps >= 1 && numcomps <= 4, "Unsupported number of components");
for (int i = 0; i < numcomps; i++) for (int i = 0; i < numcomps; i++)
{ {
const opj_image_comp_t& comp = image_->comps[i]; const opj_image_comp_t& comp = image_->comps[i];
......
...@@ -470,7 +470,11 @@ bool PAMDecoder::readHeader() ...@@ -470,7 +470,11 @@ bool PAMDecoder::readHeader()
selected_fmt = CV_IMWRITE_PAM_FORMAT_GRAYSCALE; selected_fmt = CV_IMWRITE_PAM_FORMAT_GRAYSCALE;
else if (m_channels == 3 && m_maxval < 256) else if (m_channels == 3 && m_maxval < 256)
selected_fmt = CV_IMWRITE_PAM_FORMAT_RGB; selected_fmt = CV_IMWRITE_PAM_FORMAT_RGB;
else
CV_Error(Error::StsError, "Can't determine selected_fmt (IMWRITE_PAM_FORMAT_NULL)");
} }
CV_CheckDepth(m_sampledepth, m_sampledepth == CV_8U || m_sampledepth == CV_16U, "");
CV_Check(m_channels, m_channels >= 1 && m_channels <= 4, "Unsupported number of channels");
m_type = CV_MAKETYPE(m_sampledepth, m_channels); m_type = CV_MAKETYPE(m_sampledepth, m_channels);
m_offset = m_strm.getPos(); m_offset = m_strm.getPos();
...@@ -567,6 +571,10 @@ bool PAMDecoder::readData(Mat& img) ...@@ -567,6 +571,10 @@ bool PAMDecoder::readData(Mat& img)
FillColorRow1( data, src, m_width, palette ); FillColorRow1( data, src, m_width, palette );
} }
} }
else
{
CV_Error(Error::StsError, cv::format("Unsupported value of target_channels: %d", target_channels));
}
} else { } else {
for (int y = 0; y < m_height; y++, data += imp_stride) for (int y = 0; y < m_height; y++, data += imp_stride)
{ {
......
...@@ -145,8 +145,8 @@ bool TiffDecoder::checkSignature( const String& signature ) const ...@@ -145,8 +145,8 @@ bool TiffDecoder::checkSignature( const String& signature ) const
int TiffDecoder::normalizeChannelsNumber(int channels) const int TiffDecoder::normalizeChannelsNumber(int channels) const
{ {
CV_Assert(channels <= 4); CV_Check(channels, channels >= 1 && channels <= 4, "Unsupported number of channels");
return channels > 4 ? 4 : channels; return channels;
} }
ImageDecoder TiffDecoder::newDecoder() const ImageDecoder TiffDecoder::newDecoder() const
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册