summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMasahiko Sawada2024-06-12 00:56:13 +0000
committerMasahiko Sawada2024-06-12 00:56:13 +0000
commit18404ea60141a2e2eaf58a5ebbd2b99f7a0cd442 (patch)
treee906e63a37dd4a31f639a9777676969340e9ea67
parent915de706d28c433283e9dc63701e8f978488a2b9 (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.c14
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;