diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index 14a4e8d4881..771fc49393a 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -414,6 +414,8 @@ static char *passwordFromFile(const char *hostname, const char *port, const char const char *username, const char *pgpassfile); static void pgpassfileWarning(PGconn *conn); static void default_threadlock(int acquire); +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 */ @@ -1652,14 +1654,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; } @@ -2522,8 +2524,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)