Skip to content

Commit fd2f0ef

Browse files
Fix Buffered.read().
1 parent f6e2dab commit fd2f0ef

File tree

2 files changed

+9
-0
lines changed

2 files changed

+9
-0
lines changed

Lib/test/test_io/test_bufferedio.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,13 @@ def test_large_read_from_small_file(self):
439439
bufio = self.tp(rawio)
440440
self.assertEqual(bufio.read(size), b'abc')
441441

442+
def test_large_read_from_large_file(self):
443+
data = b'abc' * ((5 << 20) + 54321)
444+
for size in (len(data), sys.maxsize):
445+
rawio = self.MockFileIO(data)
446+
bufio = self.tp(rawio)
447+
self.assertEqual(bufio.read(size), data)
448+
442449
def test_large_read1_from_small_file(self):
443450
for size in support.itersize(1 << 20, sys.maxsize):
444451
rawio = self.MockRawIO((b'abc',))

Modules/_io/bufferedio.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1849,6 +1849,7 @@ _bufferedreader_read_generic(buffered *self, Py_ssize_t size)
18491849
PyBytesWriter_Discard(writer);
18501850
goto error;
18511851
}
1852+
out = PyBytesWriter_GetData(writer);
18521853
}
18531854
Py_ssize_t r = MINUS_LAST_BLOCK(self, allocated - written);
18541855
if (r == 0) {
@@ -1877,6 +1878,7 @@ _bufferedreader_read_generic(buffered *self, Py_ssize_t size)
18771878
PyBytesWriter_Discard(writer);
18781879
goto error;
18791880
}
1881+
out = PyBytesWriter_GetData(writer);
18801882
}
18811883
/* NOTE: when the read is satisfied, we avoid issuing any additional
18821884
reads, which could block indefinitely (e.g. on a socket).

0 commit comments

Comments
 (0)