Skip to content

Commit 128910e

Browse files
committed
Limit max number of arguments (closes #127)
1 parent 8001f6e commit 128910e

File tree

2 files changed

+12
-0
lines changed

2 files changed

+12
-0
lines changed

asyncpg/protocol/prepared_stmt.pyx

+3
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@ cdef class PreparedStatementState:
9191
WriteBuffer writer
9292
Codec codec
9393

94+
if len(args) > 32767:
95+
raise ValueError('number of arguments cannot exceed 32767')
96+
9497
self._ensure_args_encoder()
9598
self._ensure_rows_decoder()
9699

tests/test_prepare.py

+9
Original file line numberDiff line numberDiff line change
@@ -534,3 +534,12 @@ async def test_prepare_27_max_cacheable_statement_size(self):
534534
# Test that short prepared statements can still be cached.
535535
await self.con.prepare('SELECT 2')
536536
self.assertEqual(len(cache), 2)
537+
538+
async def test_prepare_28_max_args(self):
539+
N = 32768
540+
args = ','.join('${}'.format(i) for i in range(1, N + 1))
541+
query = 'SELECT ARRAY[{}]'.format(args)
542+
543+
with self.assertRaisesRegex(ValueError,
544+
'number of arguments cannot exceed 32767'):
545+
await self.con.fetchval(query, *range(1, N + 1))

0 commit comments

Comments
 (0)