File tree Expand file tree Collapse file tree 4 files changed +19
-2
lines changed Expand file tree Collapse file tree 4 files changed +19
-2
lines changed Original file line number Diff line number Diff line change @@ -992,8 +992,14 @@ other .
992
992
}
993
993
994
994
{param } {
995
+ ErrorSaveContext escontext = {T_ErrorSaveContext};
996
+ int32 val;
997
+
995
998
SET_YYLLOC ();
996
- yylval->ival = atol (yytext + 1 );
999
+ val = pg_strtoint32_safe (yytext + 1 , (Node *) &escontext);
1000
+ if (escontext.error_occurred )
1001
+ yyerror (" parameter number too large" );
1002
+ yylval->ival = val;
997
1003
return PARAM;
998
1004
}
999
1005
{param_junk } {
Original file line number Diff line number Diff line change @@ -938,7 +938,13 @@ cppline {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})((\/\*[^*/]*\*+
938
938
}
939
939
940
940
{param } {
941
- base_yylval.ival = atol (yytext+1 );
941
+ int val;
942
+
943
+ errno = 0 ;
944
+ val = strtoint (yytext + 1 , NULL , 10 );
945
+ if (errno == ERANGE)
946
+ mmfatal (PARSE_ERROR, " parameter number too large" );
947
+ base_yylval.ival = val;
942
948
return PARAM;
943
949
}
944
950
{param_junk } {
Original file line number Diff line number Diff line change @@ -206,6 +206,10 @@ PREPARE p1 AS SELECT $1a;
206
206
ERROR: trailing junk after parameter at or near "$1a"
207
207
LINE 1: PREPARE p1 AS SELECT $1a;
208
208
^
209
+ PREPARE p1 AS SELECT $2147483648;
210
+ ERROR: parameter number too large at or near "$2147483648"
211
+ LINE 1: PREPARE p1 AS SELECT $2147483648;
212
+ ^
209
213
SELECT 0b;
210
214
ERROR: invalid binary integer at or near "0b"
211
215
LINE 1: SELECT 0b;
Original file line number Diff line number Diff line change @@ -52,6 +52,7 @@ SELECT 0.0e1a;
52
52
SELECT 0 .0e;
53
53
SELECT 0 .0e+ a;
54
54
PREPARE p1 AS SELECT $1a;
55
+ PREPARE p1 AS SELECT $2147483648 ;
55
56
56
57
SELECT 0b;
57
58
SELECT 1b;
You can’t perform that action at this time.
0 commit comments