From 62c795ef489f4cbf29d543e92d99875b75291e24 Mon Sep 17 00:00:00 2001 From: Jacob Champion Date: Fri, 30 Jan 2026 16:41:26 -0800 Subject: [PATCH v4 1/6] oauth: Report cleanup errors as warnings on stderr Using conn->errorMessage for these "shouldn't-happen" cases will only work if the connection itself fails. Our SSL and password callbacks print WARNINGs when they find themselves in similar situations, so follow their lead. Reviewed-by: Zsolt Parragi Discussion: https://postgr.es/m/CAOYmi%2BmEU_q9sr1PMmE-4rLwFN%3DOjyndDwFZvpsMU3RNJLrM9g%40mail.gmail.com --- src/interfaces/libpq-oauth/oauth-curl.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/interfaces/libpq-oauth/oauth-curl.c b/src/interfaces/libpq-oauth/oauth-curl.c index 691e7ec1d9f..2c147f98d0d 100644 --- a/src/interfaces/libpq-oauth/oauth-curl.c +++ b/src/interfaces/libpq-oauth/oauth-curl.c @@ -286,17 +286,15 @@ struct async_ctx * Tears down the Curl handles and frees the async_ctx. */ static void -free_async_ctx(PGconn *conn, struct async_ctx *actx) +free_async_ctx(struct async_ctx *actx) { /* * In general, none of the error cases below should ever happen if we have * no bugs above. But if we do hit them, surfacing those errors somehow * might be the only way to have a chance to debug them. * - * TODO: At some point it'd be nice to have a standard way to warn about - * teardown failures. Appending to the connection's error message only - * helps if the bug caused a connection failure; otherwise it'll be - * buried... + * Print them as warnings to stderr, following the example of similar + * situations in fe-secure-openssl.c and fe-connect.c. */ if (actx->curlm && actx->curl) @@ -304,9 +302,9 @@ free_async_ctx(PGconn *conn, struct async_ctx *actx) CURLMcode err = curl_multi_remove_handle(actx->curlm, actx->curl); if (err) - libpq_append_conn_error(conn, - "libcurl easy handle removal failed: %s", - curl_multi_strerror(err)); + fprintf(stderr, + libpq_gettext("WARNING: libcurl easy handle removal failed: %s\n"), + curl_multi_strerror(err)); } if (actx->curl) @@ -324,9 +322,9 @@ free_async_ctx(PGconn *conn, struct async_ctx *actx) CURLMcode err = curl_multi_cleanup(actx->curlm); if (err) - libpq_append_conn_error(conn, - "libcurl multi handle cleanup failed: %s", - curl_multi_strerror(err)); + fprintf(stderr, + libpq_gettext("WARNING: libcurl multi handle cleanup failed: %s\n"), + curl_multi_strerror(err)); } free_provider(&actx->provider); @@ -359,7 +357,7 @@ pg_fe_cleanup_oauth_flow(PGconn *conn) if (state->async_ctx) { - free_async_ctx(conn, state->async_ctx); + free_async_ctx(state->async_ctx); state->async_ctx = NULL; } -- 2.34.1