psql: Make ParseVariableDouble reject values above max

ParseVariableDouble missed returning false after logging an error when
the parsed value exceeded max, making the value assigned rather than
rejected.  Backpatch down to v18 where this was introduced as part of
the \WATCH_INTERVAL.

Author: Sven Klemm <sven@tigerdata.com>
Co-authored-by: Daniel Gustafsson <daniel@yesql.se>
Reviewed-by: Daniel Gustafsson <daniel@yesql.se>
Discussion: https://postgr.es/m/CAMCrgp31p_5SDVi7dwnP39tTW5icQ0MWHA+N4kJdXgkL0PEy8w@mail.gmail.com
Backpatch-through: 18
This commit is contained in:
Daniel Gustafsson 2026-05-18 08:33:36 -07:00
parent 20a4b06a1e
commit e0c641ebbf
2 changed files with 3 additions and 0 deletions

View file

@ -451,6 +451,8 @@ psql_fails_like(
'\set WATCH_INTERVAL 1e500',
qr/is out of range/,
'WATCH_INTERVAL variable is out of range');
psql_like($node, '\echo :WATCH_INTERVAL',
qr/^2$/m, 'WATCH_INTERVAL variable was not altered');
# Test \g output piped into a program.
# The program is perl -pe '' to simply copy the input to the output.

View file

@ -224,6 +224,7 @@ ParseVariableDouble(const char *value, const char *name, double *result, double
if (name)
pg_log_error("invalid value \"%s\" for variable \"%s\": must be less than %.2f",
value, name, max);
return false;
}
*result = dblval;
return true;