From: Michael Meskes Date: Mon, 2 Apr 2001 08:17:24 +0000 (+0000) Subject: Synced pgc.l with scan.l. X-Git-Tag: REL7_1~48 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e6851f056a8f8f87dd17f3559f77a53f9526cf72;p=postgresql Synced pgc.l with scan.l. --- diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog index 4d8f038ce2..41c07a43ec 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 e8896e3cc6..6c05ccf32e 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(); } {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; } {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; } {ip} {