]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
pg_stat_statements: Set PlannedStmt to NULL after nested utility execution
authorMichael Paquier <michael@paquier.xyz>
Wed, 13 May 2026 06:39:44 +0000 (15:39 +0900)
committerMichael Paquier <michael@paquier.xyz>
Wed, 13 May 2026 06:39:44 +0000 (15:39 +0900)
As mentioned in 8268e41aca23, pgss_ProcessUtility() may free the
PlannedStmt after an internal ROLLBACK.  This commit sets the
PlannedStmt "pstmt" to NULL once it is no longer safe to rely on it,
making bugs similar to the one fixed by the previous commit easier to
detect.

Suggested-by: Andres Freund <andres@anarazel.de>
Reviewed-by: Chao Li <li.evan.chao@gmail.com>
Discussion: https://postgr.es/m/0A9A8DAC-BC3C-4C7A-9504-2C6050405544@anarazel.de

contrib/pg_stat_statements/pg_stat_statements.c

index a2d3ab770cc64152f6768600308846028182ddd0..92315627916d6bf6b1b50239e2355d2eacfa000d 100644 (file)
@@ -1175,6 +1175,7 @@ pgss_ProcessUtility(PlannedStmt *pstmt, const char *queryString,
                 * For the same reason, we can't risk restoring pstmt->queryId to its
                 * former value, which'd otherwise be a good idea.
                 */
+               pstmt = NULL;
 
                INSTR_TIME_SET_CURRENT(duration);
                INSTR_TIME_SUBTRACT(duration, start);