mirror of
https://github.com/opencv/opencv.git
synced 2024-11-24 03:00:14 +08:00
Excluded nullptr leak to arithmetic HAL got from empty Mat.
This commit is contained in:
parent
6cc166985d
commit
307dc2a298
@ -997,6 +997,13 @@ void cv::add( InputArray src1, InputArray src2, OutputArray dst,
|
|||||||
{
|
{
|
||||||
CV_INSTRUMENT_REGION();
|
CV_INSTRUMENT_REGION();
|
||||||
|
|
||||||
|
CV_Assert(src1.empty() == src2.empty());
|
||||||
|
if (src1.empty() && src2.empty())
|
||||||
|
{
|
||||||
|
dst.release();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
arithm_op(src1, src2, dst, mask, dtype, getAddTab(), false, 0, OCL_OP_ADD );
|
arithm_op(src1, src2, dst, mask, dtype, getAddTab(), false, 0, OCL_OP_ADD );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1005,6 +1012,13 @@ void cv::subtract( InputArray _src1, InputArray _src2, OutputArray _dst,
|
|||||||
{
|
{
|
||||||
CV_INSTRUMENT_REGION();
|
CV_INSTRUMENT_REGION();
|
||||||
|
|
||||||
|
CV_Assert(_src1.empty() == _src2.empty());
|
||||||
|
if (_src1.empty() && _src2.empty())
|
||||||
|
{
|
||||||
|
_dst.release();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
ExtendedTypeFunc subExtFunc = getSubExtFunc(_src1.depth(), _src2.depth(), dtype < 0 ? _dst.depth() : dtype);
|
ExtendedTypeFunc subExtFunc = getSubExtFunc(_src1.depth(), _src2.depth(), dtype < 0 ? _dst.depth() : dtype);
|
||||||
arithm_op(_src1, _src2, _dst, mask, dtype, getSubTab(), false, 0, OCL_OP_SUB,
|
arithm_op(_src1, _src2, _dst, mask, dtype, getSubTab(), false, 0, OCL_OP_SUB,
|
||||||
/* extendedFunc */ subExtFunc);
|
/* extendedFunc */ subExtFunc);
|
||||||
@ -1014,6 +1028,13 @@ void cv::absdiff( InputArray src1, InputArray src2, OutputArray dst )
|
|||||||
{
|
{
|
||||||
CV_INSTRUMENT_REGION();
|
CV_INSTRUMENT_REGION();
|
||||||
|
|
||||||
|
CV_Assert(src1.empty() == src2.empty());
|
||||||
|
if (src1.empty() && src2.empty())
|
||||||
|
{
|
||||||
|
dst.release();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
arithm_op(src1, src2, dst, noArray(), -1, getAbsDiffTab(), false, 0, OCL_OP_ABSDIFF);
|
arithm_op(src1, src2, dst, noArray(), -1, getAbsDiffTab(), false, 0, OCL_OP_ABSDIFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1131,6 +1152,13 @@ void divide(InputArray src1, InputArray src2,
|
|||||||
{
|
{
|
||||||
CV_INSTRUMENT_REGION();
|
CV_INSTRUMENT_REGION();
|
||||||
|
|
||||||
|
CV_Assert(src1.empty() == src2.empty());
|
||||||
|
if (src1.empty() && src2.empty())
|
||||||
|
{
|
||||||
|
dst.release();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
arithm_op(src1, src2, dst, noArray(), dtype, getDivTab(), true, &scale, OCL_OP_DIV_SCALE);
|
arithm_op(src1, src2, dst, noArray(), dtype, getDivTab(), true, &scale, OCL_OP_DIV_SCALE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1139,6 +1167,12 @@ void divide(double scale, InputArray src2,
|
|||||||
{
|
{
|
||||||
CV_INSTRUMENT_REGION();
|
CV_INSTRUMENT_REGION();
|
||||||
|
|
||||||
|
if (src2.empty())
|
||||||
|
{
|
||||||
|
dst.release();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
arithm_op(src2, src2, dst, noArray(), dtype, getRecipTab(), true, &scale, OCL_OP_RECIP_SCALE);
|
arithm_op(src2, src2, dst, noArray(), dtype, getRecipTab(), true, &scale, OCL_OP_RECIP_SCALE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1172,6 +1206,13 @@ void cv::addWeighted( InputArray src1, double alpha, InputArray src2,
|
|||||||
{
|
{
|
||||||
CV_INSTRUMENT_REGION();
|
CV_INSTRUMENT_REGION();
|
||||||
|
|
||||||
|
CV_Assert(src1.empty() == src2.empty());
|
||||||
|
if (src1.empty() && src2.empty())
|
||||||
|
{
|
||||||
|
dst.release();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
double scalars[] = {alpha, beta, gamma};
|
double scalars[] = {alpha, beta, gamma};
|
||||||
arithm_op(src1, src2, dst, noArray(), dtype, getAddWeightedTab(), true, scalars, OCL_OP_ADDW);
|
arithm_op(src1, src2, dst, noArray(), dtype, getAddWeightedTab(), true, scalars, OCL_OP_ADDW);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user