summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2024-10-02 17:30:36 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2024-10-02 17:30:36 -0400
commite7af9b52f67998f72f3d57f506e235f3cda151cb (patch)
treeaf78cdb62efef23a8a1972b7eb2c75d098c8b39d
parent5f15107875f232f80baf7bee516e3a905fe35b06 (diff)
Parse libpq's "keepalives" option more like other integer options.
Use pqParseIntParam (nee parse_int_param) instead of using strtol directly. This allows trailing whitespace, which the previous coding didn't, and makes the spelling of the error message consistent with other similar cases. This seems to be an oversight in commit e7a221797, which introduced parse_int_param. That fixed places that were using atoi(), but missed this place which was randomly using strtol() instead. Ordinarily I'd consider this minor cleanup not worth back-patching. However, it seems that ecpg assumes it can add trailing whitespace to URL parameters, so that use of the keepalives option fails in that context. Perhaps that's worth improving as a separate matter. In the meantime, back-patch this to all supported branches. Yuto Sasaki (some further cleanup by me) Discussion: https://postgr.es/m/TY2PR01MB36286A7B97B9A15793335D18C1772@TY2PR01MB3628.jpnprd01.prod.outlook.com
-rw-r--r--src/interfaces/libpq/fe-connect.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c
index d7945375d33..4a30f526936 100644
--- a/src/interfaces/libpq/fe-connect.c
+++ b/src/interfaces/libpq/fe-connect.c
@@ -426,6 +426,8 @@ static void pgpassfileWarning(PGconn *conn);
static void default_threadlock(int acquire);
static bool sslVerifyProtocolVersion(const char *version);
static bool sslVerifyProtocolRange(const char *min, const char *max);
+static bool parse_int_param(const char *value, int *result, PGconn *conn,
+ const char *context);
/* global variable because fe-auth.c needs to access it */
@@ -1784,14 +1786,14 @@ connectFailureMessage(PGconn *conn, int errorno)
static int
useKeepalives(PGconn *conn)
{
- char *ep;
int val;
if (conn->keepalives == NULL)
return 1;
- val = strtol(conn->keepalives, &ep, 10);
- if (*ep)
+
+ if (!parse_int_param(conn->keepalives, &val, conn, "keepalives"))
return -1;
+
return val != 0 ? 1 : 0;
}
@@ -2627,8 +2629,7 @@ keep_going: /* We will come back to here until there is
if (usekeepalives < 0)
{
- appendPQExpBufferStr(&conn->errorMessage,
- libpq_gettext("keepalives parameter must be an integer\n"));
+ /* error is already reported */
err = 1;
}
else if (usekeepalives == 0)