Synced pgc.l with scan.l.
authorMichael Meskes <meskes@postgresql.org>
Mon, 2 Apr 2001 08:17:24 +0000 (08:17 +0000)
committerMichael Meskes <meskes@postgresql.org>
Mon, 2 Apr 2001 08:17:24 +0000 (08:17 +0000)
src/interfaces/ecpg/ChangeLog
src/interfaces/ecpg/preproc/pgc.l

index 4d8f038ce26af298d4b10d66b6bb1eca97715a3b..41c07a43ecdf86333f535a21c67852f16bb37d6c 100644 (file)
@@ -1060,8 +1060,12 @@ Mon Feb 26 15:22:04 CET 2001
 
    - Fixed misplaced variables FoundInto and QueryIsRule.
 
-Don Mar 29 10:23:05 CEST 2001
+Thu Mar 29 10:23:05 CEST 2001
 
    - Applied bug fix in ecpgtype.h by Adriaan Joubert.
+
+Mon Apr  2 10:16:10 CEST 2001
+
+   - Synced scan.l and pgc.l.
    - Set ecpg version to 2.8.0. 
    - Set library version to 3.2.0.
index e8896e3cc60f4c1977339413232d6779a73777cc..6c05ccf32e5aa94cf84294dcb05516f1e4d47749 100644 (file)
@@ -12,7 +12,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.77 2001/02/21 18:53:47 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.78 2001/04/02 08:17:24 meskes Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -335,13 +335,20 @@ cppline           {space}*#(.*\\{line_end})*.*
                    startlit();
                }
 <xh>{xhstop}           {
+                   long val;
                    char* endptr;
 
                    BEGIN(SQL);
                    errno = 0;
-                   yylval.ival = strtol(literalbuf, &endptr, 16);
-                   if (*endptr != '\0' || errno == ERANGE)
+                   val = strtol(literalbuf, &endptr, 16);
+                   if (*endptr != '\0' || errno == ERANGE
+#ifdef HAVE_LONG_INT_64  
+                       /* if long > 32 bits, check for overflow of int4 */
+                                           || val != (long) ((int32) val)
+#endif
+                       )
                        mmerror(ET_ERROR, "Bad hexadecimal integer input");
+                   yylval.ival = val;
                    return ICONST;
                }
 
@@ -498,16 +505,23 @@ cppline           {space}*#(.*\\{line_end})*.*
                    return PARAM;
                }
 <C,SQL>{integer}       {
+                   long val;
                    char* endptr;
 
                    errno = 0;
-                   yylval.ival = strtol((char *)yytext, &endptr,10);
-                   if (*endptr != '\0' || errno == ERANGE)
+                   val = strtol((char *)yytext, &endptr,10);
+                   if (*endptr != '\0' || errno == ERANGE
+#ifdef HAVE_LONG_INT_64  
+                       /* if long > 32 bits, check for overflow of int4 */
+                                           || val != (long) ((int32) val)
+#endif
+                       )
                    {
                        errno = 0;
                        yylval.str = mm_strdup((char*)yytext);
                        return FCONST;
                    }
+                   yylval.ival = val;
                    return ICONST;
                }
 <SQL>{ip}          {