postgres.git / summary / log / commit / refs

commit    65f431affda822b3734f04d31c46107e15bc2d34
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Wed Oct 02 21:30:36 2024 +0000
First released in: 18.0, 12.21, 13.17, 14.14, 15.9, 16.5, 17.1

    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


src/interfaces/libpq/fe-connect.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index 6bce6f647bd..4a08769e287 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -2067,14 +2067,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; } @@ -2958,7 +2958,7 @@ keep_going: /* We will come back to here until there is if (usekeepalives < 0) { - libpq_append_conn_error(conn, "keepalives parameter must be an integer"); + /* error is already reported */ err = 1; } else if (usekeepalives == 0) [parent: e4859f857b6e]