From e6851f056a8f8f87dd17f3559f77a53f9526cf72 Mon Sep 17 00:00:00 2001
From: Michael Meskes <meskes@postgresql.org>
Date: Mon, 2 Apr 2001 08:17:24 +0000
Subject: [PATCH] Synced pgc.l with scan.l.

---
 src/interfaces/ecpg/ChangeLog     |  6 +++++-
 src/interfaces/ecpg/preproc/pgc.l | 24 +++++++++++++++++++-----
 2 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog
index 4d8f038ce26..41c07a43ecd 100644
--- a/src/interfaces/ecpg/ChangeLog
+++ b/src/interfaces/ecpg/ChangeLog
@@ -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.
diff --git a/src/interfaces/ecpg/preproc/pgc.l b/src/interfaces/ecpg/preproc/pgc.l
index e8896e3cc60..6c05ccf32e5 100644
--- a/src/interfaces/ecpg/preproc/pgc.l
+++ b/src/interfaces/ecpg/preproc/pgc.l
@@ -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}			{
-- 
GitLab