diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index 5fe556045dd..70abfc049ff 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -436,6 +436,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 */ @@ -1744,14 +1746,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; } @@ -2611,8 +2613,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)