@@ -21,7 +21,7 @@ cdef class Memory:
2121 return cpython.PyBytes_FromStringAndSize(self .buf, self .length)
2222
2323 @staticmethod
24- cdef inline Memory new(char * buf, object owner, int length):
24+ cdef inline Memory new(char * buf, object owner, ssize_t length):
2525 cdef Memory mem
2626 mem = Memory.__new__ (Memory)
2727 mem.buf = buf
@@ -70,13 +70,13 @@ cdef class WriteBuffer:
7070 cdef inline len (self ):
7171 return self ._length
7272
73- cdef inline _ensure_alloced(self , size_t extra_length):
74- cdef size_t new_size = extra_length + self ._length
73+ cdef inline _ensure_alloced(self , ssize_t extra_length):
74+ cdef ssize_t new_size = extra_length + self ._length
7575
7676 if new_size > self ._size:
7777 self ._reallocate(new_size)
7878
79- cdef _reallocate(self , new_size):
79+ cdef _reallocate(self , ssize_t new_size):
8080 cdef char * new_buf
8181
8282 if new_size < _BUFFER_MAX_GROW:
@@ -86,18 +86,18 @@ cdef class WriteBuffer:
8686 new_size += _BUFFER_INITIAL_SIZE
8787
8888 if self ._smallbuf_inuse:
89- new_buf = < char * > PyMem_Malloc(sizeof(char ) * new_size)
89+ new_buf = < char * > PyMem_Malloc(sizeof(char ) * < size_t > new_size)
9090 if new_buf is NULL :
9191 self ._buf = NULL
9292 self ._size = 0
9393 self ._length = 0
9494 raise MemoryError
95- memcpy(new_buf, self ._buf, self ._size)
95+ memcpy(new_buf, self ._buf, < size_t > self ._size)
9696 self ._size = new_size
9797 self ._buf = new_buf
9898 self ._smallbuf_inuse = False
9999 else :
100- new_buf = < char * > PyMem_Realloc(< void * > self ._buf, new_size)
100+ new_buf = < char * > PyMem_Realloc(< void * > self ._buf, < size_t > new_size)
101101 if new_buf is NULL :
102102 PyMem_Free(self ._buf)
103103 self ._buf = NULL
@@ -117,16 +117,18 @@ cdef class WriteBuffer:
117117
118118 cdef inline end_message(self ):
119119 # "length-1" to exclude the message type byte
120- cdef size_t mlen = self ._length - 1
120+ cdef ssize_t mlen = self ._length - 1
121121
122122 self ._check_readonly()
123123 if not self ._message_mode:
124124 raise BufferError(
125125 ' end_message can only be called with start_message' )
126126 if self ._length < 5 :
127127 raise BufferError(' end_message: buffer is too small' )
128+ if mlen > _MAXINT32:
129+ raise BufferError(' end_message: message is too large' )
128130
129- hton.pack_int32(& self ._buf[1 ], mlen)
131+ hton.pack_int32(& self ._buf[1 ], < int32_t > mlen)
130132 return self
131133
132134 cdef write_buffer(self , WriteBuffer buf):
@@ -138,7 +140,7 @@ cdef class WriteBuffer:
138140 self ._ensure_alloced(buf._length)
139141 memcpy(self ._buf + self ._length,
140142 < void * > buf._buf,
141- buf._length)
143+ < size_t > buf._length)
142144 self ._length += buf._length
143145
144146 cdef write_byte(self , char b):
@@ -171,7 +173,7 @@ cdef class WriteBuffer:
171173 self ._check_readonly()
172174 self ._ensure_alloced(len )
173175
174- memcpy(self ._buf + self ._length, < void * > data, len )
176+ memcpy(self ._buf + self ._length, < void * > data, < size_t > len )
175177 self ._length += len
176178
177179 cdef write_int16(self , int16_t i):
@@ -246,7 +248,7 @@ cdef class ReadBuffer:
246248
247249 cdef feed_data(self , data):
248250 cdef:
249- int32_t dlen
251+ ssize_t dlen
250252 bytes data_bytes
251253
252254 if not cpython.PyBytes_CheckExact(data):
@@ -293,7 +295,7 @@ cdef class ReadBuffer:
293295 raise RuntimeError (
294296 ' debug: second buffer of ReadBuffer is empty' )
295297
296- cdef inline char * _try_read_bytes(self , int nbytes):
298+ cdef inline char * _try_read_bytes(self , ssize_t nbytes):
297299 # Important: caller must call _ensure_first_buf() prior
298300 # to calling try_read_bytes, and must not overread
299301
@@ -319,10 +321,10 @@ cdef class ReadBuffer:
319321 else :
320322 return NULL
321323
322- cdef inline read(self , int nbytes):
324+ cdef inline read(self , ssize_t nbytes):
323325 cdef:
324326 object result
325- int nread
327+ ssize_t nread
326328 char * buf
327329
328330 self ._ensure_first_buf()
@@ -419,8 +421,8 @@ cdef class ReadBuffer:
419421 ' to be in the buffer' )
420422
421423 cdef:
422- int pos
423- int nread
424+ ssize_t pos
425+ ssize_t nread
424426 bytes result
425427 char * buf
426428 char * buf_start
@@ -504,8 +506,8 @@ cdef class ReadBuffer:
504506 self ._current_message_ready = 1
505507 return 1
506508
507- cdef inline char * try_consume_message(self , int32_t * len ):
508- cdef int32_t buf_len
509+ cdef inline char * try_consume_message(self , ssize_t * len ):
510+ cdef ssize_t buf_len
509511
510512 if not self ._current_message_ready:
511513 return NULL
@@ -579,7 +581,7 @@ cdef class ReadBuffer:
579581@ cython.freelist (_BUFFER_FREELIST_SIZE)
580582cdef class FastReadBuffer:
581583
582- cdef inline const char * read(self , size_t n) except NULL :
584+ cdef inline const char * read(self , ssize_t n) except NULL :
583585 cdef const char * result
584586
585587 if n > self .len:
@@ -599,12 +601,12 @@ cdef class FastReadBuffer:
599601 return result
600602
601603 cdef inline FastReadBuffer slice_from(self , FastReadBuffer source,
602- size_t len ):
604+ ssize_t len ):
603605 self .buf = source.read(len )
604606 self .len = len
605607 return self
606608
607- cdef _raise_ins_err(self , size_t n, size_t len ):
609+ cdef _raise_ins_err(self , ssize_t n, ssize_t len ):
608610 raise BufferError(
609611 ' insufficient data in buffer: requested {}, remaining {}' .
610612 format(n, self .len))
0 commit comments