From cff9694a08a6116cd155c25aa3af8b13ffeebb00 Mon Sep 17 00:00:00 2001 From: Krzysztof Filipek Date: Wed, 28 May 2025 12:11:42 +0200 Subject: [PATCH] [CTL] Add size check for umfCtlExec --- src/libumf.c | 4 ++++ test/ctl/ctl_api.cpp | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/src/libumf.c b/src/libumf.c index f5e2004ed..46c264016 100644 --- a/src/libumf.c +++ b/src/libumf.c @@ -128,6 +128,10 @@ umf_result_t umfCtlExec(const char *name, void *ctx, void *arg, size_t size) { return UMF_RESULT_ERROR_INVALID_ARGUMENT; } + if ((arg == NULL && size != 0) || (arg != NULL && size == 0)) { + return UMF_RESULT_ERROR_INVALID_ARGUMENT; + } + return ctl_query(NULL, ctx, CTL_QUERY_PROGRAMMATIC, name, CTL_QUERY_RUNNABLE, arg, size) ? UMF_RESULT_ERROR_UNKNOWN diff --git a/test/ctl/ctl_api.cpp b/test/ctl/ctl_api.cpp index 82db18219..8bbb9d820 100644 --- a/test/ctl/ctl_api.cpp +++ b/test/ctl/ctl_api.cpp @@ -351,6 +351,14 @@ TEST_F(CtlTest, ctlSizeValidation) { p.freeResources(); } +TEST_F(CtlTest, ctlExecInvalidSize) { + std::string name = "umf.pool.default.disjoint.name"; + ASSERT_EQ(umfCtlSet(name.c_str(), NULL, (void *)"test_value", 0), + UMF_RESULT_ERROR_INVALID_ARGUMENT); + ASSERT_EQ(umfCtlSet(name.c_str(), NULL, NULL, 10), + UMF_RESULT_ERROR_INVALID_ARGUMENT); +} + #ifdef PROVIDER_DEFAULTS_NOT_IMPLEMENTED_YET TEST_F(CtlTest, ctlDefaultMultithreadedProvider) { std::vector threads;