diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog index 4d8f038ce26af298d4b10d66b6bb1eca97715a3b..41c07a43ecdf86333f535a21c67852f16bb37d6c 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 e8896e3cc60f4c1977339413232d6779a73777cc..6c05ccf32e5aa94cf84294dcb05516f1e4d47749 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} {