pgsql: Avoid crash after function syntax error in a replication worker. - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Avoid crash after function syntax error in a replication worker.
Date
Msg-id E1oqcfi-000GzL-1T@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Avoid crash after function syntax error in a replication worker.

If a syntax error occurred in a SQL-language or PL/pgSQL-language
CREATE FUNCTION or DO command executed in a logical replication worker,
we'd suffer a null pointer dereference or assertion failure.  That
seems like a rather contrived case, but nonetheless worth fixing.

The cause is that function_parse_error_transpose assumes it must be
executing within the context of a Portal, but logical/worker.c
doesn't create a Portal since it's not running the standard executor.
We can just back off the hard Assert check and make it fail gracefully
if there's not an ActivePortal.  (I have a feeling that the aggressive
check here was my fault originally, probably because I wasn't sure if
the case would always hold and wanted to find out.  Well, now we know.)

The hazard seems to exist in all branches that have logical replication,
so back-patch to v10.

Maxim Orlov, Anton Melnikov, Masahiko Sawada, Tom Lane

Discussion: https://postgr.es/m/b570c367-ba38-95f3-f62d-5f59b9808226@inbox.ru
Discussion: https://postgr.es/m/adf0452f-8c6b-7def-d35e-ab516c80088e@inbox.ru

Branch
------
REL_13_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/b00f342ea0f01c3964491108dc4428838ffc269e

Modified Files
--------------
src/backend/catalog/pg_proc.c | 20 +++++++++++++++-----
1 file changed, 15 insertions(+), 5 deletions(-)


pgsql-committers by date:

Previous
From: Alvaro Herrera
Date:
Subject: pgsql: Resolve partition strategy during early parsing
Next
From: Peter Eisentraut
Date:
Subject: pgsql: Make AssertPointerAlignment available to frontend code