Skip to content

Commit 9da2c0e

Browse files
committed
Validate flags inside umfPoolCreateInternal()
Signed-off-by: Lukasz Dorau <[email protected]>
1 parent 51f1429 commit 9da2c0e

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

src/memory_pool.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,10 @@ static umf_result_t umfDefaultCtlPoolHandle(void *hPool, int operationType,
110110
return UMF_RESULT_ERROR_NOT_SUPPORTED;
111111
}
112112

113+
// logical sum (OR) of all umf_pool_create_flags_t flags
114+
static const umf_pool_create_flags_t UMF_POOL_CREATE_FLAG_ALL =
115+
UMF_POOL_CREATE_FLAG_OWN_PROVIDER | UMF_POOL_CREATE_FLAG_DISABLE_TRACKING;
116+
113117
static umf_result_t umfPoolCreateInternal(const umf_memory_pool_ops_t *ops,
114118
umf_memory_provider_handle_t provider,
115119
const void *params,
@@ -119,6 +123,12 @@ static umf_result_t umfPoolCreateInternal(const umf_memory_pool_ops_t *ops,
119123
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
120124
}
121125

126+
// validate flags
127+
if (flags & ~UMF_POOL_CREATE_FLAG_ALL) {
128+
LOG_ERR("Invalid flags: 0x%x", flags);
129+
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
130+
}
131+
122132
umf_result_t ret = UMF_RESULT_SUCCESS;
123133

124134
if (ops->version != UMF_POOL_OPS_VERSION_CURRENT) {

test/memoryPoolAPI.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,25 @@ TEST_P(umfPoolWithCreateFlagsTest, umfPoolCreateFlagsInvalidProviders) {
349349
ASSERT_EQ(ret, UMF_RESULT_ERROR_INVALID_ARGUMENT);
350350
}
351351

352+
// logical sum (OR) of all umf_pool_create_flags_t flags
353+
static constexpr umf_pool_create_flags_t UMF_POOL_CREATE_FLAG_ALL =
354+
UMF_POOL_CREATE_FLAG_OWN_PROVIDER | UMF_POOL_CREATE_FLAG_DISABLE_TRACKING;
355+
356+
TEST_P(umfPoolWithCreateFlagsTest, umfPoolCreateInvalidFlags) {
357+
umf_memory_provider_handle_t provider = nullptr;
358+
umf_result_t ret =
359+
umfMemoryProviderCreate(&UMF_NULL_PROVIDER_OPS, nullptr, &provider);
360+
ASSERT_EQ(ret, UMF_RESULT_SUCCESS);
361+
ASSERT_NE(provider, nullptr);
362+
363+
umf_memory_pool_handle_t pool = nullptr;
364+
ret = umfPoolCreate(&MALLOC_POOL_OPS, provider, nullptr,
365+
(UMF_POOL_CREATE_FLAG_ALL + 1), &pool);
366+
ASSERT_EQ(ret, UMF_RESULT_ERROR_INVALID_ARGUMENT);
367+
368+
umfMemoryProviderDestroy(provider);
369+
}
370+
352371
struct poolInitializeTest : umf_test::test,
353372
::testing::WithParamInterface<umf_result_t> {};
354373

0 commit comments

Comments
 (0)