]> granicus.if.org Git - postgresql/commitdiff
Prevent under/over flow of float8 constants in parser. Small regression fix.
authorBruce Momjian <bruce@momjian.us>
Wed, 19 Feb 1997 20:11:05 +0000 (20:11 +0000)
committerBruce Momjian <bruce@momjian.us>
Wed, 19 Feb 1997 20:11:05 +0000 (20:11 +0000)
src/backend/parser/scan.l
src/backend/utils/adt/float.c
src/include/utils/builtins.h

index 605d940dc9a177afddf8786bb3be19973273ba97..4ea2fc2e812fc477d7f850d9d7de8c6efaab4030 100644 (file)
@@ -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];
index 3c934003d195b9560c3a76bb8edf1524948371c8..52fc5f98e3a2985e2649ddd31b2d136a8b7fe28a 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/utils/adt/float.c,v 1.11 1997/02/14 04:17:52 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/utils/adt/float.c,v 1.12 1997/02/19 20:10:49 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -127,7 +127,7 @@ static void CheckFloat4Val(double val)
    
    raise an elog warning if it is
 */
-static void CheckFloat8Val(double val)
+void CheckFloat8Val(double val)
 {
   /* defining unsafe floats's will make float4 and float8 ops faster
      at the cost of safety, of course! */
index 1552ba460a9b90361cf48f3f342f6a644efee755..6a896a492af1642dee566ece07d09ce7bb9500a9 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: builtins.h,v 1.8 1996/11/16 04:59:10 momjian Exp $
+ * $Id: builtins.h,v 1.9 1997/02/19 20:11:05 momjian Exp $
  *
  * NOTES
  *    This should normally only be included by fmgr.h.
@@ -260,6 +260,7 @@ extern char *filename_in(char *file);
 extern char *filename_out(char *s);
 
 /* float.c */
+extern void CheckFloat8Val(double val);        /* used by lex */
 extern float32 float4in(char *num);
 extern char *float4out(float32 num);
 extern float64 float8in(char *num);