Re: BUG #19480: PL/Python SRF crashes (SIGSEGV) when function is replaced mid-iteration: use-after-free in PLy_funct - Mailing list pgsql-bugs

From Tom Lane
Subject Re: BUG #19480: PL/Python SRF crashes (SIGSEGV) when function is replaced mid-iteration: use-after-free in PLy_funct
Date
Msg-id 381335.1782070804@sss.pgh.pa.us
Whole thread
In response to Re: BUG #19480: PL/Python SRF crashes (SIGSEGV) when function is replaced mid-iteration: use-after-free in PLy_funct  ("Matheus Alcantara" <matheusssilv97@gmail.com>)
Responses Re: BUG #19480: PL/Python SRF crashes (SIGSEGV) when function is replaced mid-iteration: use-after-free in PLy_funct
List pgsql-bugs
"Matheus Alcantara" <matheusssilv97@gmail.com> writes:
> Thanks for the review! I've tried to address all your points in the
> attached v2.

Pushed after a round of review.  I made some mostly-cosmetic changes,
such as rewriting comments (consolidating some stuff I thought was
duplicative).  The main thing I fixed that was an actual bug was
you were careless about lifespan of variables around PG_TRY blocks.
The rule of thumb is that if a variable is modified inside PG_TRY
and then used after that block (including in the PG_CATCH) then it
has to be marked volatile.  Where possible, I avoid using the
volatile marking by assigning the variable's value before PG_TRY.

> I've also added a regression test, not sure if there is a better way to
> exercise this fix but this test crash without this patch applied.

Kind of a hokey test, since it doesn't model the likely actual case
where the CREATE happens in another session, but this is as close as
we'll get without a much more complex test setup.  I kept it, and
also added another test that exercises the early-termination path,
since code coverage showed me that ShutdownPLyFunction() wasn't being
reached.

            regards, tom lane



pgsql-bugs by date:

Previous
From: carl clemens
Date:
Subject: Re: psql variable substitution in plpgsql loop
Next
From: PG Bug reporting form
Date:
Subject: BUG #19530: Crash (SIGSEGV/SIGBUS) in parallel B-tree index vacuum during plain VACUUM