git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 08cecfa)
In guc.c, ignore ERANGE errors from strtod().
2019年3月11日 15:25:23 +0000 (11:25 -0400)
2019年3月11日 15:25:26 +0000 (11:25 -0400)
Instead, just proceed with the infinity or zero result that it should
return for overflow/underflow. This avoids a platform dependency,
in that various versions of strtod are inconsistent about whether they
signal ERANGE for a value that's specified as infinity.

It's possible this won't be enough to remove the buildfarm failures
we're seeing from ac75959cd, in which case I'll take out the infinity
test case that commit added. But first let's see if we can fix it.

Discussion: https://postgr.es/m/E1h33xk-0001Og-Gs@gemulon.postgresql.org


diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index fe6c6f8a05a51fc3db423d99663d3d35256b63d3..1c4f9ac04e6d18bb7e308a97784cd58d19410944 100644 (file)
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -6240,13 +6240,15 @@ 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 */
- if (endptr == value || errno == ERANGE)
- return false; /* no HINT for these cases */
-
- /* reject NaN (infinities will fail range checks later) */
+ /*
+ * 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 (isnan(val))
return false; /* treat same as syntax error; no HINT */
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /