Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit9c2e660

Browse files
committed
Limit max parameter number with MaxAllocSize
MaxAllocSize puts an upper bound on the largest possible parameternumber ($268435455). Use that limit instead of INT_MAX to report thatno parameters exist beyond that point instead of reporting an errorabout the maximum allocation size being exceeded.Author: Erik Wienhold <ewie@ewie.name>Discussion:https://www.postgresql.org/message-id/flat/5d216d1c-91f6-4cbe-95e2-b4cbd930520c@ewie.name
1 parentd35cd06 commit9c2e660

File tree

3 files changed

+10
-1
lines changed

3 files changed

+10
-1
lines changed

‎src/backend/parser/parse_param.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include"parser/parse_param.h"
3232
#include"utils/builtins.h"
3333
#include"utils/lsyscache.h"
34+
#include"utils/memutils.h"
3435

3536

3637
typedefstructFixedParamState
@@ -136,7 +137,7 @@ variable_paramref_hook(ParseState *pstate, ParamRef *pref)
136137
Param*param;
137138

138139
/* Check parameter number is in range */
139-
if (paramno <=0||paramno>INT_MAX /sizeof(Oid))
140+
if (paramno <=0||paramno>MaxAllocSize /sizeof(Oid))
140141
ereport(ERROR,
141142
(errcode(ERRCODE_UNDEFINED_PARAMETER),
142143
errmsg("there is no parameter $%d",paramno),

‎src/test/regress/expected/prepare.out

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,11 @@ SELECT name, statement, parameter_types, result_types FROM pg_prepared_statement
184184
| UPDATE tenk1 SET stringu1 = $2 WHERE unique1 = $1; | |
185185
(6 rows)
186186

187+
-- max parameter number and one above
188+
PREPARE q9 AS SELECT $268435455, $268435456;
189+
ERROR: there is no parameter $268435456
190+
LINE 1: PREPARE q9 AS SELECT $268435455, $268435456;
191+
^
187192
-- test DEALLOCATE ALL;
188193
DEALLOCATE ALL;
189194
SELECT name, statement, parameter_types FROM pg_prepared_statements

‎src/test/regress/sql/prepare.sql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,9 @@ PREPARE q8 AS
7878
SELECT name, statement, parameter_types, result_typesFROM pg_prepared_statements
7979
ORDER BY name;
8080

81+
-- max parameter number and one above
82+
PREPARE q9ASSELECT $268435455, $268435456;
83+
8184
-- test DEALLOCATE ALL;
8285
DEALLOCATE ALL;
8386
SELECT name, statement, parameter_typesFROM pg_prepared_statements

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp