postgres.git / summary / log / commit / refs

commit    0766bc57e9f94e5321e6ea4cb49db430224b2e60
Author:   Heikki Linnakangas <heikki.linnakangas@iki.fi>
Date:     Fri Jul 03 11:57:35 2026 +0000
First released in: 18.6

    Fix tracing of BackendKeyData and CancelRequest
    
    BackendKeyData length was increased from 4 bytes to a variable-length
    length (up to 256 bytes) in a460251f0a. However, pqTrace still traces
    it as a 4 bytes key, leading to a "mismatched message length" warning
    message. The same issue impacts the tracing of CancelRequest.
    
    This patch fixes the issue by using pqTraceOutputNchar instead of
    pqTraceOutputInt32 in both cases.
    
    Author: Anthonin Bonnefoy <anthonin.bonnefoy@datadoghq.com>
    Discussion: https://www.postgresql.org/message-id/CAO6_Xqo6gTv9=76H=k2qDRFU+KHuBiY2S=bQynEr6J8gS7L6xA@mail.gmail.com
    Backpatch-through: 18


src/interfaces/libpq/fe-trace.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/interfaces/libpq/fe-trace.c b/src/interfaces/libpq/fe-trace.c index c348b08c39b..2901fa5b451 100644 --- a/src/interfaces/libpq/fe-trace.c +++ b/src/interfaces/libpq/fe-trace.c @@ -452,11 +452,12 @@ pqTraceOutput_CopyOutResponse(FILE *f, const char *message, int *cursor) } static void -pqTraceOutput_BackendKeyData(FILE *f, const char *message, int *cursor, bool regress) +pqTraceOutput_BackendKeyData(FILE *f, const char *message, int *cursor, int length, + bool regress) { fprintf(f, "BackendKeyData\t"); pqTraceOutputInt32(f, message, cursor, regress); - pqTraceOutputInt32(f, message, cursor, regress); + pqTraceOutputNchar(f, length - *cursor + 1, message, cursor, regress); } static void @@ -762,7 +763,8 @@ pqTraceOutputMessage(PGconn *conn, const char *message, bool toServer) /* No message content */ break; case PqMsg_BackendKeyData: - pqTraceOutput_BackendKeyData(conn->Pfdebug, message, &logCursor, regress); + pqTraceOutput_BackendKeyData(conn->Pfdebug, message, &logCursor, + length, regress); break; case PqMsg_NoData: fprintf(conn->Pfdebug, "NoData"); @@ -876,7 +878,8 @@ pqTraceOutputNoTypeByteMessage(PGconn *conn, const char *message) pqTraceOutputInt16(conn->Pfdebug, message, &logCursor); pqTraceOutputInt16(conn->Pfdebug, message, &logCursor); pqTraceOutputInt32(conn->Pfdebug, message, &logCursor, regress); - pqTraceOutputInt32(conn->Pfdebug, message, &logCursor, regress); + pqTraceOutputNchar(conn->Pfdebug, length - logCursor, message, + &logCursor, regress); } else if (version == NEGOTIATE_SSL_CODE) { [parent: fb284f2f9bdb]