diff options
Diffstat (limited to 'src/backend/parser/scan.l')
-rw-r--r-- | src/backend/parser/scan.l | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/backend/parser/scan.l b/src/backend/parser/scan.l index 605d940dc9a..4ea2fc2e812 100644 --- a/src/backend/parser/scan.l +++ b/src/backend/parser/scan.l @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.9 1997/02/14 04:15:59 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.10 1997/02/19 20:10:38 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -20,6 +20,7 @@ #include <stdlib.h> #endif /* __linux__ */ #include <string.h> +#include <errno.h> #include "postgres.h" #include "miscadmin.h" @@ -30,6 +31,7 @@ #include "parser/scansup.h" #include "parser/sysfunc.h" #include "parse.h" +#include "utils/builtins.h" extern char *parseString; extern char *parseCh; @@ -109,8 +111,13 @@ other . return (ICONST); } {real} { - yylval.dval = atof((char*)yytext); - return (FCONST); + char* endptr; + errno = 0; + yylval.dval = strtod(((char *)yytext),&endptr); + if (*endptr != '\0' || errno == ERANGE) + elog(WARN,"\tBad float8 input format\n"); + CheckFloat8Val(yylval.dval); + return (FCONST); } {quote} { char literal[MAX_PARSE_BUFFER]; |