v1-0001-Fix-tracing-of-BackendKeyData-and-CancelRequest.patch

application/octet-stream

Filename: v1-0001-Fix-tracing-of-BackendKeyData-and-CancelRequest.patch
Type: application/octet-stream
Part: 2
Message: Fix tracing of BackendKeyData and CancelRequest messages

Patch

Format: format-patch
Series: patch v1-0001
Subject: Fix tracing of BackendKeyData and CancelRequest
File+
src/interfaces/libpq/fe-trace.c 4 4
From 0d6d1b6134e50233ba543acf2885a021dfd16bb4 Mon Sep 17 00:00:00 2001
From: Anthonin Bonnefoy <anthonin.bonnefoy@datadoghq.com>
Date: Fri, 26 Jun 2026 10:37:32 +0200
Subject: 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.
---
 src/interfaces/libpq/fe-trace.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/interfaces/libpq/fe-trace.c b/src/interfaces/libpq/fe-trace.c
index c348b08c39b..aa2637e4f1e 100644
--- a/src/interfaces/libpq/fe-trace.c
+++ b/src/interfaces/libpq/fe-trace.c
@@ -452,11 +452,11 @@ 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 len, int *cursor, bool regress)
 {
 	fprintf(f, "BackendKeyData\t");
 	pqTraceOutputInt32(f, message, cursor, regress);
-	pqTraceOutputInt32(f, message, cursor, regress);
+	pqTraceOutputNchar(f, len, message, cursor, regress);
 }
 
 static void
@@ -762,7 +762,7 @@ 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, conn->be_cancel_key_len, &logCursor, regress);
 			break;
 		case PqMsg_NoData:
 			fprintf(conn->Pfdebug, "NoData");
@@ -876,7 +876,7 @@ 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, conn->be_cancel_key_len, message, &logCursor, regress);
 	}
 	else if (version == NEGOTIATE_SSL_CODE)
 	{
-- 
2.54.0