mirror of
https://github.com/opencv/opencv.git
synced 2025-06-12 12:22:51 +08:00
imgcodecs: add runtime checks to validate input
This commit is contained in:
parent
19926e2979
commit
f9b1dbe2ac
@ -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()
|
|||||||
selected_fmt = IMWRITE_PAM_FORMAT_GRAYSCALE;
|
selected_fmt = IMWRITE_PAM_FORMAT_GRAYSCALE;
|
||||||
else if (m_channels == 3 && m_maxval < 256)
|
else if (m_channels == 3 && m_maxval < 256)
|
||||||
selected_fmt = IMWRITE_PAM_FORMAT_RGB;
|
selected_fmt = 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)
|
|||||||
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)
|
||||||
{
|
{
|
||||||
|
@ -149,8 +149,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
|
||||||
|
Loading…
Reference in New Issue
Block a user