Skip to content

Commit e7af9b5

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 5f15107 commit e7af9b5

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
@@ -426,6 +426,8 @@ static void pgpassfileWarning(PGconn *conn);
426426
static void default_threadlock(int acquire);
427427
static bool sslVerifyProtocolVersion(const char *version);
428428
static bool sslVerifyProtocolRange(const char *min, const char *max);
429+
static bool parse_int_param(const char *value, int *result, PGconn *conn,
430+
const char *context);
429431

430432

431433
/* global variable because fe-auth.c needs to access it */
@@ -1784,14 +1786,14 @@ connectFailureMessage(PGconn *conn, int errorno)
17841786
static int
17851787
useKeepalives(PGconn *conn)
17861788
{
1787-
char *ep;
17881789
int val;
17891790

17901791
if (conn->keepalives == NULL)
17911792
return 1;
1792-
val = strtol(conn->keepalives, &ep, 10);
1793-
if (*ep)
1793+
1794+
if (!parse_int_param(conn->keepalives, &val, conn, "keepalives"))
17941795
return -1;
1796+
17951797
return val != 0 ? 1 : 0;
17961798
}
17971799

@@ -2627,8 +2629,7 @@ PQconnectPoll(PGconn *conn)
26272629

26282630
if (usekeepalives < 0)
26292631
{
2630-
appendPQExpBufferStr(&conn->errorMessage,
2631-
libpq_gettext("keepalives parameter must be an integer\n"));
2632+
/* error is already reported */
26322633
err = 1;
26332634
}
26342635
else if (usekeepalives == 0)

0 commit comments

Comments
 (0)