diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index c0032fabad2c38ee0ffcdecfc3e4e576efd05e07..73402dec6a8e1b6a857b80ad75d98281c8fa0f7f 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -10,7 +10,7 @@
  * Written by Peter Eisentraut <peter_e@gmx.net>.
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.401 2007/06/21 18:14:21 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.402 2007/06/21 22:59:12 tgl Exp $
  *
  *--------------------------------------------------------------------
  */
@@ -3721,9 +3721,9 @@ ReportGUCOption(struct config_generic * record)
 
 /*
  * Try to interpret value as boolean value.  Valid values are: true,
- * false, yes, no, on, off, 1, 0.  If the string parses okay, return
- * true, else false.  If result is not NULL, return the parsing result
- * there.
+ * false, yes, no, on, off, 1, 0; as well as unique prefixes thereof.
+ * If the string parses okay, return true, else false.
+ * If okay and result is not NULL, return the value in *result.
  */
 static bool
 parse_bool(const char *value, bool *result)
@@ -3999,9 +3999,9 @@ parse_int(const char *value, int *result, int flags, const char **hintmsg)
 
 
 /*
- * Try to parse value as a floating point constant in the usual
- * format.	If the value parsed okay return true, else false.  If
- * result is not NULL, return the semantic value there.
+ * Try to parse value as a floating point number in the usual format.
+ * If the string parses okay, return true, else false.
+ * If okay and result is not NULL, return the value in *result.
  */
 static bool
 parse_real(const char *value, double *result)
@@ -4009,14 +4009,20 @@ parse_real(const char *value, double *result)
 	double		val;
 	char	   *endptr;
 
+	if (result)
+		*result = 0;			/* suppress compiler warning */
+
 	errno = 0;
 	val = strtod(value, &endptr);
-	if (endptr == value || *endptr != '\0' || errno == ERANGE)
-	{
-		if (result)
-			*result = 0;		/* suppress compiler warning */
+	if (endptr == value || errno == ERANGE)
 		return false;
-	}
+
+	/* allow whitespace after number */
+	while (isspace((unsigned char) *endptr))
+		endptr++;
+	if (*endptr != '\0')
+		return false;
+
 	if (result)
 		*result = val;
 	return true;