diff options
author | Masahiko Sawada | 2024-06-12 00:56:13 +0000 |
---|---|---|
committer | Masahiko Sawada | 2024-06-12 00:56:13 +0000 |
commit | 18404ea60141a2e2eaf58a5ebbd2b99f7a0cd442 (patch) | |
tree | e906e63a37dd4a31f639a9777676969340e9ea67 | |
parent | 915de706d28c433283e9dc63701e8f978488a2b9 (diff) |
Fix segmentation fault in test_tidstore.
The do_set_block_offsets() and other functions accessing the tidstore
did not check if the tidstore was NULL. This led to a segmentation
fault when these functions are called without calling the
test_create().
This commit adds NULL checks in relevant functions of test_tidstore to
raise an error instead if the tidstore is not initialized.
Bug: #18483
Reported-by: Alexander Kozhemyakin
Reviewed-by: Michael Paquier
Discussion: https://postgr.es/m/18483-30bfff42de238000%40postgresql.org
-rw-r--r-- | src/test/modules/test_tidstore/test_tidstore.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/test/modules/test_tidstore/test_tidstore.c b/src/test/modules/test_tidstore/test_tidstore.c index 5417163407b..3f6a11bf21c 100644 --- a/src/test/modules/test_tidstore/test_tidstore.c +++ b/src/test/modules/test_tidstore/test_tidstore.c @@ -147,6 +147,13 @@ sanity_check_array(ArrayType *ta) } static void +check_tidstore_available(void) +{ + if (tidstore == NULL) + elog(ERROR, "tidstore is not created"); +} + +static void purge_from_verification_array(BlockNumber blkno) { int dst = 0; @@ -167,6 +174,7 @@ do_set_block_offsets(PG_FUNCTION_ARGS) OffsetNumber *offs; int noffs; + check_tidstore_available(); sanity_check_array(ta); noffs = ArrayGetNItems(ARR_NDIM(ta), ARR_DIMS(ta)); @@ -217,6 +225,8 @@ check_set_block_offsets(PG_FUNCTION_ARGS) int num_lookup_tids = 0; BlockNumber prevblkno = 0; + check_tidstore_available(); + /* lookup each member in the verification array */ for (int i = 0; i < items.num_tids; i++) if (!TidStoreIsMember(tidstore, &items.insert_tids[i])) @@ -305,6 +315,8 @@ test_is_full(PG_FUNCTION_ARGS) { bool is_full; + check_tidstore_available(); + is_full = (TidStoreMemoryUsage(tidstore) > tidstore_empty_size); PG_RETURN_BOOL(is_full); @@ -314,6 +326,8 @@ test_is_full(PG_FUNCTION_ARGS) Datum test_destroy(PG_FUNCTION_ARGS) { + check_tidstore_available(); + TidStoreDestroy(tidstore); tidstore = NULL; items.num_tids = 0; |