Skip to content

Commit d8f4734

Browse files
committed
Add SSL EOF check in get_buffer
1 parent 344f1f9 commit d8f4734

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

pymongo/network_layer.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -584,9 +584,9 @@ def get_buffer(self, sizehint: int) -> memoryview:
584584
If any data does not fit into the returned buffer, this method will be called again until
585585
either no data remains or an empty buffer is returned.
586586
"""
587-
# TODO: This is super hacky and is purely for debugging purposes
587+
# Check for SSL EOF edge case, no data will be written to the buffer we return
588588
if sizehint == 0:
589-
return memoryview(bytearray(256))
589+
return memoryview(bytearray(16))
590590
if self._overflow is not None:
591591
return self._overflow[self._overflow_index :]
592592
return self._buffer[self._end_index :]
@@ -617,6 +617,8 @@ def buffer_updated(self, nbytes: int) -> None:
617617
self._end_index += nbytes
618618
# All data of the current message has been received
619619
if self._end_index + self._overflow_index - self._start_index >= self._body_size:
620+
# Pause reading to avoid storing an arbitrary number of messages in memory before necessary
621+
self.transport.pause_reading()
620622
if self._pending_messages:
621623
result = self._pending_messages.popleft()
622624
else:
@@ -659,8 +661,6 @@ def buffer_updated(self, nbytes: int) -> None:
659661
nbytes_reprocess = self._end_index - self._start_index
660662
self._end_index -= nbytes_reprocess
661663
self.buffer_updated(nbytes_reprocess)
662-
# Pause reading to avoid storing an arbitrary number of messages in memory before necessary
663-
self.transport.pause_reading()
664664

665665
def process_header(self) -> tuple[int, int]:
666666
"""Unpack a MongoDB Wire Protocol header."""

0 commit comments

Comments
 (0)