• Tom Lane's avatar
    Avoid crash after function syntax error in a replication worker. · 2489c38c
    Tom Lane authored
    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
    2489c38c
pg_proc.c 35.7 KB