From 8343af575acf67b26613332adb04a49dcff378f5 Mon Sep 17 00:00:00 2001 From: Tatsuo Ishii Date: Fri, 15 Nov 2024 17:08:26 +0900 Subject: [PATCH] Fix bug in do_query. Upon receiving DataRow packet, it converts the number of fields from network byte order to host byte order. Unfortunately it used htons() for this purpose instead of ntohs(). This is simply wrong. Similarly it used htonl() instead of htohl() while converting the data length from network byte order to host byte order. This is wrong too. But fortunately both ntohs()/htons() and ntohl()/htonl() swap the byte and they bring the same result (i.e. htonl(data_len) == ntohl(data_len). So actually the bug does not hurt anything. However a bug is a bug. This commit fixes them. Backpatch-through: v4.1 --- src/protocol/pool_process_query.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/protocol/pool_process_query.c b/src/protocol/pool_process_query.c index d40f21fad..5003b553b 100644 --- a/src/protocol/pool_process_query.c +++ b/src/protocol/pool_process_query.c @@ -2372,7 +2372,7 @@ do_query(POOL_CONNECTION * backend, char *query, POOL_SELECT_RESULT * *result, i if (p) { memcpy(&shortval, p, sizeof(short)); - num_fields = htons(shortval); + num_fields = ntohs(shortval); p += sizeof(short); } else @@ -2404,7 +2404,7 @@ do_query(POOL_CONNECTION * backend, char *query, POOL_SELECT_RESULT * *result, i if (major == PROTO_MAJOR_V3) { memcpy(&intval, p, sizeof(int)); - len = htonl(intval); + len = ntohl(intval); p += sizeof(int); res->nullflags[num_data] = len; -- 2.39.5