Skip to content

Commit 2120eda

Browse files
committed
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 e7a2217, 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
1 parent 7bfaa46 commit 2120eda

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

src/interfaces/libpq/fe-connect.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,8 @@ static void pgpassfileWarning(PGconn *conn);
436436
static void default_threadlock(int acquire);
437437
static bool sslVerifyProtocolVersion(const char *version);
438438
static bool sslVerifyProtocolRange(const char *min, const char *max);
439+
static bool parse_int_param(const char *value, int *result, PGconn *conn,
440+
const char *context);
439441

440442

441443
/* global variable because fe-auth.c needs to access it */
@@ -1744,14 +1746,14 @@ connectFailureMessage(PGconn *conn, int errorno)
17441746
static int
17451747
useKeepalives(PGconn *conn)
17461748
{
1747-
char *ep;
17481749
int val;
17491750

17501751
if (conn->keepalives == NULL)
17511752
return 1;
1752-
val = strtol(conn->keepalives, &ep, 10);
1753-
if (*ep)
1753+
1754+
if (!parse_int_param(conn->keepalives, &val, conn, "keepalives"))
17541755
return -1;
1756+
17551757
return val != 0 ? 1 : 0;
17561758
}
17571759

@@ -2611,8 +2613,7 @@ PQconnectPoll(PGconn *conn)
26112613

26122614
if (usekeepalives < 0)
26132615
{
2614-
appendPQExpBufferStr(&conn->errorMessage,
2615-
libpq_gettext("keepalives parameter must be an integer\n"));
2616+
/* error is already reported */
26162617
err = 1;
26172618
}
26182619
else if (usekeepalives == 0)

0 commit comments

Comments
 (0)