Skip to content

Commit 1d793e3

Browse files
committed
Return an empty bytes object for size=0
1 parent 7a449e1 commit 1d793e3

File tree

4 files changed

+8
-7
lines changed

4 files changed

+8
-7
lines changed

Doc/library/io.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -733,7 +733,7 @@ than raw I/O does.
733733
Return bytes from the current position onwards without advancing the position.
734734
At least one byte of data is returned if not at EOF.
735735
Return an empty :class:`bytes` object at EOF.
736-
If the size argument is less than one or larger than the number of available bytes,
736+
If the size argument is negative or larger than the number of available bytes,
737737
a copy of the buffer from the current position until the end is returned.
738738

739739
.. versionadded:: 3.13

Lib/_pyio.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -984,7 +984,7 @@ def peek(self, size=1):
984984
# Due to slicing semantics, this works correctly
985985
# even if the size is greater than the buffer length or
986986
# the position is beyond the end of the buffer
987-
if size < 1:
987+
if size < 0:
988988
size = len(self._buffer) - self._pos
989989
return self._buffer[self._pos : self._pos + size]
990990

Lib/test/test_memoryio.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,7 @@ def test_peek(self):
524524
self.assertEqual(memio.peek(1), buf[:1])
525525
self.assertEqual(memio.peek(1), buf[:1])
526526
self.assertEqual(memio.peek(), buf[:1])
527-
self.assertEqual(memio.peek(0), buf)
527+
self.assertEqual(memio.peek(0), b"")
528528
self.assertEqual(memio.peek(len(buf) + 100), buf)
529529
self.assertEqual(memio.peek(-1), buf)
530530
self.assertEqual(memio.tell(), 0)
@@ -533,13 +533,14 @@ def test_peek(self):
533533
self.assertEqual(memio.peek(1), buf[1:2])
534534
self.assertEqual(memio.peek(1), buf[1:2])
535535
self.assertEqual(memio.peek(), buf[1:2])
536-
self.assertEqual(memio.peek(0), buf[1:])
536+
self.assertEqual(memio.peek(0), b"")
537537
self.assertEqual(memio.peek(len(buf) + 100), buf[1:])
538538
self.assertEqual(memio.peek(-1), buf[1:])
539539
self.assertEqual(memio.tell(), 1)
540540
memio.read()
541541
self.assertEqual(memio.tell(), len(buf))
542542
self.assertEqual(memio.peek(1), self.EOF)
543+
self.assertEqual(memio.peek(0), b"")
543544
self.assertEqual(memio.tell(), len(buf))
544545
# Peeking works after writing
545546
abc = self.buftype("abc")

Modules/_io/bytesio.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -479,7 +479,7 @@ _io.BytesIO.peek
479479
480480
Return bytes from the stream without advancing the position.
481481
482-
If the size argument is zero or negative, read until EOF is reached.
482+
If the size argument is negative, read until EOF is reached.
483483
Return an empty bytes object at EOF.
484484
[clinic start generated code]*/
485485

@@ -491,9 +491,9 @@ _io_BytesIO_peek_impl(bytesio *self, Py_ssize_t size)
491491

492492
/* adjust invalid sizes */
493493
Py_ssize_t n = self->string_size - self->pos;
494-
if (size < 1 || size > n) {
494+
if (size < 0 || size > n) {
495495
size = n;
496-
/* size can be negative after truncate() or seek() */
496+
/* n can be negative after truncate() or seek() */
497497
if (size < 0) {
498498
size = 0;
499499
}

0 commit comments

Comments
 (0)