Skip to content

Commit 18f2aa4

Browse files
committed
Fix compiler warnings
1 parent 78b83f8 commit 18f2aa4

File tree

5 files changed

+19
-7
lines changed

5 files changed

+19
-7
lines changed

asyncpg/pgproto

Submodule pgproto updated 1 file

asyncpg/protocol/codecs/range.pyx

+14-2
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,8 @@ cdef multirange_encode(ConnectionSettings settings, WriteBuffer buf,
146146
encode_func_ex encoder, const void *encoder_arg):
147147
cdef:
148148
WriteBuffer elem_data
149+
ssize_t elem_data_len
150+
ssize_t elem_count
149151

150152
if not isinstance(obj, SequenceABC):
151153
raise TypeError(
@@ -157,10 +159,20 @@ cdef multirange_encode(ConnectionSettings settings, WriteBuffer buf,
157159
for elem in obj:
158160
range_encode(settings, elem_data, elem, elem_oid, encoder, encoder_arg)
159161

162+
elem_count = len(obj)
163+
if elem_count > INT32_MAX:
164+
raise OverflowError(f'too many elements in multirange value')
165+
166+
elem_data_len = elem_data.len()
167+
if elem_data_len > INT32_MAX - 4:
168+
raise OverflowError(
169+
f'size of encoded multirange datum exceeds the maximum allowed'
170+
f' {INT32_MAX - 4} bytes')
171+
160172
# Datum length
161-
buf.write_int32(4 + elem_data.len())
173+
buf.write_int32(4 + <int32_t>elem_data_len)
162174
# Number of elements in multirange
163-
buf.write_int32(len(obj))
175+
buf.write_int32(<int32_t>elem_count)
164176
buf.write_buffer(elem_data)
165177

166178

asyncpg/protocol/prepared_stmt.pyx

+2-2
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ cdef class PreparedStatementState:
151151
writer.write_int16(self.args_num)
152152
for idx in range(self.args_num):
153153
codec = <Codec>(self.args_codecs[idx])
154-
writer.write_int16(codec.format)
154+
writer.write_int16(<int16_t>codec.format)
155155
else:
156156
# All arguments are in binary format
157157
writer.write_int32(0x00010001)
@@ -203,7 +203,7 @@ cdef class PreparedStatementState:
203203
writer.write_int16(self.cols_num)
204204
for idx in range(self.cols_num):
205205
codec = <Codec>(self.rows_codecs[idx])
206-
writer.write_int16(codec.format)
206+
writer.write_int16(<int16_t>codec.format)
207207
else:
208208
# All columns are in binary format
209209
writer.write_int32(0x00010001)

asyncpg/protocol/protocol.pyx

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ from asyncpg.protocol cimport record
3838

3939
from libc.stdint cimport int8_t, uint8_t, int16_t, uint16_t, \
4040
int32_t, uint32_t, int64_t, uint64_t, \
41-
UINT32_MAX
41+
INT32_MAX, UINT32_MAX
4242

4343
from asyncpg.exceptions import _base as apg_exc_base
4444
from asyncpg import compat

asyncpg/protocol/record/recordobj.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ ApgRecord_New(PyTypeObject *type, PyObject *desc, Py_ssize_t size)
6363
return PyErr_NoMemory();
6464
}
6565
o = (ApgRecordObject *)type->tp_alloc(type, size);
66-
if (!_ApgObject_GC_IS_TRACKED(o)) {
66+
if (!_ApgObject_GC_IS_TRACKED((PyObject *)o)) {
6767
PyErr_SetString(
6868
PyExc_TypeError,
6969
"record subclass is not tracked by GC"

0 commit comments

Comments
 (0)