Fixes #1033 - Ensure that text that spans 3 invocations before newline is handled - don't clobber the buffer between invocations that haven't seen any lines. (#1034)
Fixes #1033 - Ensure that text that spans 3 invocations before newline is handled - don't clobber the buffer between invocations that haven't seen any lines.
This commit is contained in:
parent
27b0dbc22d
commit
ad5e6eb8b0
@ -261,7 +261,7 @@ class LineDecoder:
|
||||
text = text[idx + 1 :]
|
||||
break
|
||||
elif next_char is None:
|
||||
self.buffer = text
|
||||
self.buffer += text
|
||||
text = ""
|
||||
break
|
||||
|
||||
|
||||
@ -31,4 +31,4 @@ trustme
|
||||
uvicorn
|
||||
seed-isort-config
|
||||
|
||||
attrs>=19.2 # See: https://github.com/encode/httpx/pull/566#issuecomment-559862665
|
||||
attrs>=19.3.0 # See: https://github.com/encode/httpx/pull/566#issuecomment-559862665
|
||||
|
||||
@ -225,6 +225,15 @@ def test_line_decoder_nl():
|
||||
assert decoder.decode("a\n\nb\nc\n") == ["a\n", "\n", "b\n", "c\n"]
|
||||
assert decoder.flush() == []
|
||||
|
||||
# Issue #1033
|
||||
decoder = LineDecoder()
|
||||
assert decoder.decode("") == []
|
||||
assert decoder.decode("12345\n") == ["12345\n"]
|
||||
assert decoder.decode("foo ") == []
|
||||
assert decoder.decode("bar ") == []
|
||||
assert decoder.decode("baz\n") == ["foo bar baz\n"]
|
||||
assert decoder.flush() == []
|
||||
|
||||
|
||||
def test_line_decoder_cr():
|
||||
decoder = LineDecoder()
|
||||
@ -237,6 +246,16 @@ def test_line_decoder_cr():
|
||||
assert decoder.decode("a\r\rb\rc\r") == ["a\n", "\n", "b\n"]
|
||||
assert decoder.flush() == ["c\n"]
|
||||
|
||||
# Issue #1033
|
||||
# TODO: This seems like another bug; fix expectations and results.
|
||||
decoder = LineDecoder()
|
||||
assert decoder.decode("") == []
|
||||
assert decoder.decode("12345\r") == []
|
||||
assert decoder.decode("foo ") == []
|
||||
assert decoder.decode("bar ") == []
|
||||
assert decoder.decode("baz\r") == []
|
||||
assert decoder.flush() == ["12345\rfoo bar baz\n"]
|
||||
|
||||
|
||||
def test_line_decoder_crnl():
|
||||
decoder = LineDecoder()
|
||||
@ -255,6 +274,15 @@ def test_line_decoder_crnl():
|
||||
assert decoder.decode("\n\r\nb\r\nc") == ["a\n", "\n", "b\n"]
|
||||
assert decoder.flush() == ["c"]
|
||||
|
||||
# Issue #1033
|
||||
decoder = LineDecoder()
|
||||
assert decoder.decode("") == []
|
||||
assert decoder.decode("12345\r\n") == ["12345\n"]
|
||||
assert decoder.decode("foo ") == []
|
||||
assert decoder.decode("bar ") == []
|
||||
assert decoder.decode("baz\r\n") == ["foo bar baz\n"]
|
||||
assert decoder.flush() == []
|
||||
|
||||
|
||||
def test_invalid_content_encoding_header():
|
||||
headers = [(b"Content-Encoding", b"invalid-header")]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user