From e7652038ee793d450ced4a0942e3e56c223f26ed Mon Sep 17 00:00:00 2001 From: Lazizbek Ergashev Date: Wed, 2 Sep 2026 23:05:43 +0500 Subject: [PATCH] imgproc: reject empty input in connected components --- modules/imgproc/src/connectedcomponents.cpp | 1 + .../imgproc/test/test_connectedcomponents.cpp | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/modules/imgproc/src/connectedcomponents.cpp b/modules/imgproc/src/connectedcomponents.cpp index 065e871c5a..dc25e5b9de 100644 --- a/modules/imgproc/src/connectedcomponents.cpp +++ b/modules/imgproc/src/connectedcomponents.cpp @@ -5650,6 +5650,7 @@ namespace cv{ template static int connectedComponents_sub1(const cv::Mat& I, cv::Mat& L, int connectivity, int ccltype, StatsOp& sop){ + CV_Assert(!I.empty()); CV_Assert(L.channels() == 1 && I.channels() == 1); CV_Assert(connectivity == 8 || connectivity == 4); CV_Assert(ccltype == CCL_SPAGHETTI || ccltype == CCL_BBDT || ccltype == CCL_SAUF || ccltype == CCL_BOLELLI || ccltype == CCL_GRANA || ccltype == CCL_WU || ccltype == CCL_DEFAULT); diff --git a/modules/imgproc/test/test_connectedcomponents.cpp b/modules/imgproc/test/test_connectedcomponents.cpp index 42ee000497..8beea9f720 100644 --- a/modules/imgproc/test/test_connectedcomponents.cpp +++ b/modules/imgproc/test/test_connectedcomponents.cpp @@ -795,5 +795,25 @@ TEST(Imgproc_ConnectedComponents, regression_27568) } } +TEST(Imgproc_ConnectedComponents, regression_29854) +{ + for (const Size& size : {Size(400, 0), Size(0, 400), Size(0, 0)}) + { + Mat image = Mat::zeros(size, CV_8UC1); + + for (const int connectivity : {4, 8}) + { + for (const int ccltype : {CCL_DEFAULT, CCL_WU, CCL_GRANA, CCL_BOLELLI, CCL_SAUF, CCL_BBDT, CCL_SPAGHETTI}) + { + Mat labels, stats, centroids; + EXPECT_THROW(connectedComponents( + image, labels, connectivity, CV_32S, ccltype), Exception); + EXPECT_THROW(connectedComponentsWithStats( + image, labels, stats, centroids, connectivity, CV_32S, ccltype), Exception); + } + } + } +} + } } // namespace