[PATCH] psql: Make ParseVariableDouble reject values above max

Sven Klemm <sven@tigerdata.com>

From: Sven Klemm <sven@tigerdata.com>
To: pgsql-hackers@lists.postgresql.org
Date: 2026-05-08T15:39:29Z
Lists: pgsql-hackers

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. psql: Make ParseVariableDouble reject values above max

Attachments

Hello,

  ParseVariableDouble() in src/bin/psql/variables.c is asymmetric in how
  it handles the [min, max] bounds it documents. The lower-bound branch
  correctly returns false, but the upper-bound branch logs the error and
  then falls through to assign *result and return true. The function's
  contract ("the value must be within the range [min,max] in order to be
  considered valid"; "if unsuccessful, *result isn't clobbered") is
  broken on the upper-bound path.

  The only caller today is watch_interval_hook, so the user-visible
  effect is that an out-of-range WATCH_INTERVAL is reported as invalid
  yet still assigned.

  Reproducer:

  $ psql
# \set WATCH_INTERVAL 99999999
invalid value "99999999" for variable "WATCH_INTERVAL": must be less than
1000000.00
# \echo :WATCH_INTERVAL
99999999
  The error is printed, but the variable is set anyway.

Regards,
Sven Klemm