mirror of
https://github.com/python/cpython.git
synced 2025-08-30 05:35:08 +00:00
Fix for SF bug #1175396: readline() will now read one more character, if
the last character read is "\r" (and size is None, i.e. we're allowed to call read() multiple times), so that we can return the correct line ending (this additional character might be a "\n"). If the stream is temporarily exhausted, we might return the wrong line ending (if the last character read is "\r" and the next one (after the byte stream provides more data) is "\n", but at least the atcr member ensure that we get the correct number of lines (i.e. this "\n" will not be treated as another line ending.)
This commit is contained in:
parent
cf18a5d67b
commit
7a6dc139de
2 changed files with 91 additions and 9 deletions
|
@ -310,6 +310,15 @@ class StreamReader(Codec):
|
|||
data = data[1:]
|
||||
if data:
|
||||
self.atcr = data.endswith(u"\r")
|
||||
# If we're at a "\r" (and are allowed to read more), read one
|
||||
# extra character (which might be a "\n") to get a proper
|
||||
# line ending (If the stream is temporarily exhausted we return
|
||||
# the wrong line ending, but at least we won't generate a bogus
|
||||
# second line.
|
||||
if self.atcr and size is None:
|
||||
data += self.read(size=1, chars=1)
|
||||
self.atcr = data.endswith(u"\r")
|
||||
|
||||
line += data
|
||||
lines = line.splitlines(True)
|
||||
if lines:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue