Skip to content

Commit

Permalink
disable ippiMinMaxIndx_32f_C1R usage since it crashes on Nans
Browse files Browse the repository at this point in the history
  • Loading branch information
ilya-lavrenov committed Jul 14, 2016
1 parent a00f0c4 commit c4b57d0
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 1 deletion.
4 changes: 3 additions & 1 deletion modules/core/src/stat.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2280,7 +2280,9 @@ static bool ipp_minMaxIdx( Mat &src, double* minVal, double* maxVal, int* minIdx
#endif
depth == CV_16U ? (ippiMinMaxIndxFuncC1)ippiMinMaxIndx_16u_C1R :
#if !((defined _MSC_VER && defined _M_IX86) || defined __i386__)
depth == CV_32F ? (ippiMinMaxIndxFuncC1)ippiMinMaxIndx_32f_C1R :
// See bug #4955: the function fails with SEGFAULT when the source matrix contains NANs
// IPPICV version is 9.0.1.
// depth == CV_32F ? (ippiMinMaxIndxFuncC1)ippiMinMaxIndx_32f_C1R :
#endif
0;
CV_SUPPRESS_DEPRECATED_END
Expand Down
9 changes: 9 additions & 0 deletions modules/core/test/test_arithm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1844,3 +1844,12 @@ TEST(Normalize, regression_5876_inplace_change_type)
normalize(m, m, 1, 0, NORM_MINMAX, CV_32F);
EXPECT_EQ(0, cvtest::norm(m, result, NORM_INF));
}

TEST(MinMaxLoc, regression_4955_nans)
{
cv::Mat one_mat(2, 2, CV_32F, cv::Scalar(1));
cv::minMaxLoc(one_mat, NULL, NULL, NULL, NULL);

cv::Mat nan_mat(2, 2, CV_32F, cv::Scalar(NAN));
cv::minMaxLoc(nan_mat, NULL, NULL, NULL, NULL);
}

0 comments on commit c4b57d0

Please sign in to comment.