postgres.git / summary / log / commit / refs

commit    4f1d33d707fbdf38296ed8b262ae1ea3dcde2b18
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Mon Apr 08 21:00:07 2024 +0000
First released in: 17.0, 15.7, 16.3

    In psql, avoid leaking a PGresult after a query is cancelled.
    
    After a query cancel, the tail end of ExecQueryAndProcessResults
    took care to clear any not-yet-read PGresults; but it forgot about
    the one it has already read.  There would only be such a result
    when handling a multi-command string made with "\;", so that you'd
    have to cancel an earlier command in such a string to reach the
    bug at all.  Even then, there would only be leakage of a single
    PGresult per cancel, so it's not surprising nobody noticed this.
    But a leak is a leak.
    
    Noted while re-reviewing 90f517821, but this is independent of that:
    it dates to 7844c9918.  Back-patch to v15 where that came in.


src/bin/psql/common.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c index f5909f95478..9d9d04b8265 100644 --- a/src/bin/psql/common.c +++ b/src/bin/psql/common.c @@ -1625,6 +1625,8 @@ ExecQueryAndProcessResults(const char *query, if (cancel_pressed) { + /* drop this next result, as well as any others not yet read */ + ClearOrSaveResult(result); ClearOrSaveAllResults(); break; } [parent: dcb7cf945c88]