From fb5e1f03c334fdc2bbf318c14ed253b08a65f379 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..f807670409c 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); } @@ -2425,6 +2432,13 @@ pqFunctionCall3(PGconn *conn, Oid fnid, return pqPrepareAsyncResult(conn); } + /* + * An error may have been triggered while processing the message, bail + * out + */ + if (conn->error_result && conn->status == CONNECTION_BAD) + return pqPrepareAsyncResult(conn); + /* Completed parsing this message, keep going */ pqParseDone(conn, conn->inStart + 5 + msgLength); needInput = false; -- 2.55.0