From e29e44cd9504927458295f694cf4295d073f955e Mon Sep 17 00:00:00 2001 From: Jelte Fennema-Nio Date: Mon, 8 Apr 2024 14:10:09 +0200 Subject: [PATCH v9 3/3] Make backend libpq write functions take const pointer Since c4ab7da6061 we're now passing buffers that shouldn't be modified to secure_write. This marks all involved functions as taking const pointers to indicate that that is fine. We were not changing the contents of this buffer anyway. The only place where we need to cast it to a non-const pointer is in be_gssapi_write, but that simply seems an artifact of the GSS API. GSS has its own buffer type, which is used both for const and non-const buffers. --- src/backend/libpq/be-secure-gssapi.c | 2 +- src/backend/libpq/be-secure-openssl.c | 2 +- src/backend/libpq/be-secure.c | 2 +- src/backend/libpq/pqcomm.c | 2 +- src/include/libpq/libpq-be.h | 4 ++-- src/include/libpq/libpq.h | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/backend/libpq/be-secure-gssapi.c b/src/backend/libpq/be-secure-gssapi.c index bc04e78abba..809fe8b959b 100644 --- a/src/backend/libpq/be-secure-gssapi.c +++ b/src/backend/libpq/be-secure-gssapi.c @@ -92,7 +92,7 @@ static uint32 PqGSSMaxPktSize; /* Maximum size we can encrypt and fit the * failure if necessary, and then return an errno indicating connection loss. */ ssize_t -be_gssapi_write(Port *port, void *ptr, size_t len) +be_gssapi_write(Port *port, const void *ptr, size_t len) { OM_uint32 major, minor; diff --git a/src/backend/libpq/be-secure-openssl.c b/src/backend/libpq/be-secure-openssl.c index 29c9af1aabf..44ba6d8300c 100644 --- a/src/backend/libpq/be-secure-openssl.c +++ b/src/backend/libpq/be-secure-openssl.c @@ -799,7 +799,7 @@ be_tls_read(Port *port, void *ptr, size_t len, int *waitfor) } ssize_t -be_tls_write(Port *port, void *ptr, size_t len, int *waitfor) +be_tls_write(Port *port, const void *ptr, size_t len, int *waitfor) { ssize_t n; int err; diff --git a/src/backend/libpq/be-secure.c b/src/backend/libpq/be-secure.c index 1663f36b6b8..edf36139fe3 100644 --- a/src/backend/libpq/be-secure.c +++ b/src/backend/libpq/be-secure.c @@ -298,7 +298,7 @@ secure_raw_read(Port *port, void *ptr, size_t len) * Write data to a secure connection. */ ssize_t -secure_write(Port *port, void *ptr, size_t len) +secure_write(Port *port, const void *ptr, size_t len) { ssize_t n; int waitfor; diff --git a/src/backend/libpq/pqcomm.c b/src/backend/libpq/pqcomm.c index a3e80281196..7d3df13f532 100644 --- a/src/backend/libpq/pqcomm.c +++ b/src/backend/libpq/pqcomm.c @@ -1370,7 +1370,7 @@ internal_flush_buffer(const char *buf, size_t *start, size_t *end) { int r; - r = secure_write(MyProcPort, (char *) bufptr, bufend - bufptr); + r = secure_write(MyProcPort, bufptr, bufend - bufptr); if (r <= 0) { diff --git a/src/include/libpq/libpq-be.h b/src/include/libpq/libpq-be.h index 05cb1874c58..7f3e9118800 100644 --- a/src/include/libpq/libpq-be.h +++ b/src/include/libpq/libpq-be.h @@ -297,7 +297,7 @@ extern ssize_t be_tls_read(Port *port, void *ptr, size_t len, int *waitfor); /* * Write data to a secure connection. */ -extern ssize_t be_tls_write(Port *port, void *ptr, size_t len, int *waitfor); +extern ssize_t be_tls_write(Port *port, const void *ptr, size_t len, int *waitfor); /* * Return information about the SSL connection. @@ -337,7 +337,7 @@ extern bool be_gssapi_get_delegation(Port *port); /* Read and write to a GSSAPI-encrypted connection. */ extern ssize_t be_gssapi_read(Port *port, void *ptr, size_t len); -extern ssize_t be_gssapi_write(Port *port, void *ptr, size_t len); +extern ssize_t be_gssapi_write(Port *port, const void *ptr, size_t len); #endif /* ENABLE_GSS */ extern PGDLLIMPORT ProtocolVersion FrontendProtocol; diff --git a/src/include/libpq/libpq.h b/src/include/libpq/libpq.h index 83e338f604a..d1fab83f8c0 100644 --- a/src/include/libpq/libpq.h +++ b/src/include/libpq/libpq.h @@ -105,7 +105,7 @@ extern void secure_destroy(void); extern int secure_open_server(Port *port); extern void secure_close(Port *port); extern ssize_t secure_read(Port *port, void *ptr, size_t len); -extern ssize_t secure_write(Port *port, void *ptr, size_t len); +extern ssize_t secure_write(Port *port, const void *ptr, size_t len); extern ssize_t secure_raw_read(Port *port, void *ptr, size_t len); extern ssize_t secure_raw_write(Port *port, const void *ptr, size_t len); -- 2.34.1