From 816bbefd817a180cd986b5ba6b7b673804467e60 Mon Sep 17 00:00:00 2001 From: Anthonin Bonnefoy Date: Wed, 22 Jul 2026 14:25:44 +0200 Subject: Fix error handling in getCopyDataMessage and pqFunctionCall3 Currently, if an error is triggered in getNotify or getParameterStatus, the error is ignored and the loop will try to process the next message. This patch fixes the issue by returning -2 in getCopyDataMessage, and the error PGresult in pqFunctionCall3 when a fatal error was triggered. --- src/interfaces/libpq/fe-protocol3.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/interfaces/libpq/fe-protocol3.c b/src/interfaces/libpq/fe-protocol3.c index 9d6a285fb28..169d2e51d21 100644 --- a/src/interfaces/libpq/fe-protocol3.c +++ b/src/interfaces/libpq/fe-protocol3.c @@ -1931,6 +1931,13 @@ getCopyDataMessage(PGconn *conn) return -1; } + /* + * An error may have been triggered while processing the message, + * report it if it's the case + */ + if (conn->error_result && conn->status == CONNECTION_BAD) + return -2; + /* Drop the processed message and loop around for another */ pqParseDone(conn, conn->inCursor); } @@ -2428,6 +2435,13 @@ pqFunctionCall3(PGconn *conn, Oid fnid, /* Completed parsing this message, keep going */ pqParseDone(conn, conn->inStart + 5 + msgLength); needInput = false; + + /* + * An error may have been triggered while processing the message, bail + * out + */ + if (conn->error_result && conn->status == CONNECTION_BAD) + return pqPrepareAsyncResult(conn); } /* -- 2.55.0