diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 1c4f9ac04e6..fe6c6f8a05a 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -6240,15 +6240,13 @@ parse_real(const char *value, double *result, int flags, const char **hintmsg) if (hintmsg) *hintmsg = NULL; + errno = 0; val = strtod(value, &endptr); - if (endptr == value) - return false; /* no HINT for syntax error */ - /* - * We ignore strtod's errno, so that out-of-range inputs will just result - * in zero or infinity values. Subsequent range checks will reject those - * if necessary. We do need to reject NaN explicitly, however. - */ + if (endptr == value || errno == ERANGE) + return false; /* no HINT for these cases */ + + /* reject NaN (infinities will fail range checks later) */ if (isnan(val)) return false; /* treat same as syntax error; no HINT */ diff --git a/src/test/regress/expected/guc.out b/src/test/regress/expected/guc.out index f2590ee6769..811f80a0976 100644 --- a/src/test/regress/expected/guc.out +++ b/src/test/regress/expected/guc.out @@ -511,8 +511,6 @@ SET seq_page_cost TO 'NaN'; ERROR: invalid value for parameter "seq_page_cost": "NaN" SET vacuum_cost_delay TO '10s'; ERROR: 10000 ms is outside the valid range for parameter "vacuum_cost_delay" (0 .. 100) -SET geqo_selection_bias TO '-infinity'; -ERROR: -Infinity is outside the valid range for parameter "geqo_selection_bias" (1.5 .. 2) -- -- Test DISCARD TEMP -- diff --git a/src/test/regress/sql/guc.sql b/src/test/regress/sql/guc.sql index b3ca59c09b1..43dbba3775e 100644 --- a/src/test/regress/sql/guc.sql +++ b/src/test/regress/sql/guc.sql @@ -147,7 +147,6 @@ SELECT '2006-08-13 12:34:56'::timestamptz; -- Test some simple error cases SET seq_page_cost TO 'NaN'; SET vacuum_cost_delay TO '10s'; -SET geqo_selection_bias TO '-infinity'; -- -- Test DISCARD TEMP