Fix NULL input behaviour of pg_stat_get_replication_slot().
authorAndres Freund
Mon, 28 Mar 2022 04:39:43 +0000 (21:39 -0700)
committerAndres Freund
Mon, 28 Mar 2022 04:44:39 +0000 (21:44 -0700)
pg_stat_get_replication_slot() accidentally was marked as non-strict, crashing
when called with NULL input. As it's already released, introduce an explicit
NULL check in 14, fix the catalog in HEAD.

Bumps catversion in HEAD.

Discussion: https://postgr.es/m/20220326212432[email protected]
Backpatch: 14-, where replication slot stats were introduced

src/backend/utils/adt/pgstatfuncs.c
src/test/regress/expected/stats.out
src/test/regress/sql/stats.sql

index d899ba86f0fa6ff0fbb888d47a6681a0756b5f24..6fc2196d59a0422c59fb49672b7527c416ad30b6 100644 (file)
@@ -2315,7 +2315,7 @@ Datum
 pg_stat_get_replication_slot(PG_FUNCTION_ARGS)
 {
 #define PG_STAT_GET_REPLICATION_SLOT_COLS 10
-   text       *slotname_text = PG_GETARG_TEXT_P(0);
+   text       *slotname_text;
    NameData    slotname;
    TupleDesc   tupdesc;
    Datum       values[PG_STAT_GET_REPLICATION_SLOT_COLS];
@@ -2323,6 +2323,15 @@ pg_stat_get_replication_slot(PG_FUNCTION_ARGS)
    PgStat_StatReplSlotEntry *slotent;
    PgStat_StatReplSlotEntry allzero;
 
+   /*
+    * Function was accidentally marked as non-strict, can't change that post
+    * release.
+    */
+   if (PG_ARGISNULL(0))
+       PG_RETURN_NULL();
+
+   slotname_text = PG_GETARG_TEXT_P(0);
+
    /* Initialise values and NULL flags arrays */
    MemSet(values, 0, sizeof(values));
    MemSet(nulls, 0, sizeof(nulls));
index b01e58b98cb15137708e30d872cc97b8504defac..4eeaaca84c974ddfbdc82f10a8a9291470ed5f83 100644 (file)
@@ -201,4 +201,11 @@ FROM prevstats AS pr;
 
 DROP TABLE trunc_stats_test, trunc_stats_test1, trunc_stats_test2, trunc_stats_test3, trunc_stats_test4;
 DROP TABLE prevstats;
+-- ensure that stats accessors handle NULL input correctly
+SELECT pg_stat_get_replication_slot(NULL);
+ pg_stat_get_replication_slot 
+------------------------------
+(1 row)
+
 -- End of Stats Test
index feaaee6326e2f6e0102151aaa53dc9fca70b2f7a..dda07174ea50c45372610e1591fa6e0aff9f40e0 100644 (file)
@@ -176,4 +176,10 @@ FROM prevstats AS pr;
 
 DROP TABLE trunc_stats_test, trunc_stats_test1, trunc_stats_test2, trunc_stats_test3, trunc_stats_test4;
 DROP TABLE prevstats;
+
+
+-- ensure that stats accessors handle NULL input correctly
+SELECT pg_stat_get_replication_slot(NULL);
+
+
 -- End of Stats Test