Re: [PATCH] Fix NULL dereference in subscription REFRESH on concurrent DROP - Mailing list pgsql-hackers

From Ajin Cherian
Subject Re: [PATCH] Fix NULL dereference in subscription REFRESH on concurrent DROP
Date
Msg-id CAFPTHDbTRuxqG0J_tnUB5UbYQF-wM6QPyiSJe3FQb89Op5xP_Q@mail.gmail.com
Whole thread
In response to [PATCH] Fix NULL dereference in subscription REFRESH on concurrent DROP  (SATYANARAYANA NARLAPURAM <satyanarlapuram@gmail.com>)
List pgsql-hackers


On Sun, May 24, 2026 at 5:57 PM SATYANARAYANA NARLAPURAM <satyanarlapuram@gmail.com> wrote:
Hi Hackers,

ALTER SUBSCRIPTION ... REFRESH PUBLICATION may crash if a
subscribed table (or sequence) is dropped concurrently.

In check_publications_origin_tables(), the function iterates over
subrel_local_oids without holding locks on the individual relations.
If a table is dropped by another session between when the OID list was
collected and when get_rel_name() is called, it returns NULL.  That
NULL is then passed to quote_literal_cstr(), which dereferences it
unconditionally, causing a segfault. The same pattern exists in 
check_publications_origin_sequences() as well.

Attached a patch to fix this by doing a null check after get_rel_name() and
get_namespace_name(), and skip the relation if it's gone.

Thanks,
Satya

Hi Satya, 
I've reviewed the patch and it looks good, just a small comment - instead of silently continuing after finding a dropped local table, would you want to log an error message? 

regards,
Ajin Cherian
Fujitsu Australia

pgsql-hackers by date:

Previous
From: liu zhilong
Date:
Subject: [PATCH] doc: explain database-wide impact of old xmin on VACUUM
Next
From: Kyotaro Horiguchi
Date:
Subject: Re: pg_rewind does not rewind diverging timelines