From bacc21060603460f0422fc8e81972671b6dda1e7 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Mon, 17 Apr 2017 11:28:14 +0000 Subject: [PATCH] fixing segfaults occuring when launching those unit tests --- modules/calib3d/test/test_cameracalibration.cpp | 3 ++- modules/ml/src/lr.cpp | 3 +++ modules/ml/test/test_emknearestkmeans.cpp | 1 + modules/ml/test/test_lr.cpp | 5 +++++ modules/shape/test/test_shape.cpp | 3 +++ 5 files changed, 14 insertions(+), 1 deletion(-) diff --git a/modules/calib3d/test/test_cameracalibration.cpp b/modules/calib3d/test/test_cameracalibration.cpp index 0f0740510b..d738341eeb 100644 --- a/modules/calib3d/test/test_cameracalibration.cpp +++ b/modules/calib3d/test/test_cameracalibration.cpp @@ -1570,7 +1570,8 @@ void CV_StereoCalibrationTest::run( int ) { ts->printf( cvtest::TS::LOG, "The file %s can not be opened or has invalid content\n", filepath.c_str() ); ts->set_failed_test_info( f ? cvtest::TS::FAIL_INVALID_TEST_DATA : cvtest::TS::FAIL_MISSING_TEST_DATA ); - fclose(f); + if (f) + fclose(f); return; } diff --git a/modules/ml/src/lr.cpp b/modules/ml/src/lr.cpp index 8198003da5..f930014bf5 100644 --- a/modules/ml/src/lr.cpp +++ b/modules/ml/src/lr.cpp @@ -138,6 +138,9 @@ bool LogisticRegressionImpl::train(const Ptr& trainData, int) // return value bool ok = false; + if (trainData.empty()) { + return false; + } clear(); Mat _data_i = trainData->getSamples(); Mat _labels_i = trainData->getResponses(); diff --git a/modules/ml/test/test_emknearestkmeans.cpp b/modules/ml/test/test_emknearestkmeans.cpp index 65371755ab..2764876ff5 100644 --- a/modules/ml/test/test_emknearestkmeans.cpp +++ b/modules/ml/test/test_emknearestkmeans.cpp @@ -618,6 +618,7 @@ protected: { ts->printf(cvtest::TS::LOG, "File with spambase dataset cann't be read.\n"); ts->set_failed_test_info(cvtest::TS::FAIL_INVALID_TEST_DATA); + return; } Mat samples = data->getSamples(); diff --git a/modules/ml/test/test_lr.cpp b/modules/ml/test/test_lr.cpp index 1bca9051df..125fd8b5b1 100644 --- a/modules/ml/test/test_lr.cpp +++ b/modules/ml/test/test_lr.cpp @@ -95,6 +95,11 @@ void CV_LRTest::run( int /*start_from*/ ) string dataFileName = ts->get_data_path() + "iris.data"; Ptr tdata = TrainData::loadFromCSV(dataFileName, 0); + if (tdata.empty()) { + ts->set_failed_test_info(cvtest::TS::FAIL_INVALID_TEST_DATA); + return; + } + // run LR classifier train classifier Ptr p = LogisticRegression::create(); p->setLearningRate(1.0); diff --git a/modules/shape/test/test_shape.cpp b/modules/shape/test/test_shape.cpp index 97a621e4b5..2495320ed8 100644 --- a/modules/shape/test/test_shape.cpp +++ b/modules/shape/test/test_shape.cpp @@ -83,6 +83,9 @@ protected: vector convertContourType(const Mat& currentQuery) const { + if (currentQuery.empty()) { + return vector(); + } vector > _contoursQuery; findContours(currentQuery, _contoursQuery, RETR_LIST, CHAIN_APPROX_NONE);