Fix crash of pg_stat_statements_info() without library loaded
authorMichael Paquier <[email protected]>
Thu, 28 Jan 2021 07:22:34 +0000 (16:22 +0900)
committerMichael Paquier <[email protected]>
Thu, 28 Jan 2021 07:22:34 +0000 (16:22 +0900)
Other code paths are already protected against this case, and _PG_init()
warns about that in pg_stat_statements.c.  While on it, I have checked
the other extensions of the tree but did not notice any holes.

Oversight in 9fbc3f3.

Author: Jaime Casanova
Reviewed-by: Julien Rouhaud
Discussion: https://postgr.es/m/CAJKUy5gF4=_=qhJ1VX_tSGFfjKHb9BvzhRYWSApJD=Bfwp2SBw@mail.gmail.com

contrib/pg_stat_statements/pg_stat_statements.c

index 72a117fc19712fe69d0db2656ad167f260ee54ef..62cccbfa44dbdea2d6c8d7ce7f5239cae3f54a8c 100644 (file)
@@ -1898,6 +1898,11 @@ pg_stat_statements_info(PG_FUNCTION_ARGS)
    Datum       values[PG_STAT_STATEMENTS_INFO_COLS];
    bool        nulls[PG_STAT_STATEMENTS_INFO_COLS];
 
+   if (!pgss || !pgss_hash)
+       ereport(ERROR,
+               (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
+                errmsg("pg_stat_statements must be loaded via shared_preload_libraries")));
+
    /* Build a tuple descriptor for our result type */
    if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE)
        elog(ERROR, "return type must be a row type");