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]