Correctly handle single-byte Content-Range (#1032)

HTTPie previously failed if it continued a download with a single byte left.
This commit is contained in:
Jan Verbeek 2021-02-14 13:30:58 +01:00 committed by GitHub
parent e944dbd7fa
commit 84c7327057
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 4 additions and 4 deletions

View File

@ -81,7 +81,7 @@ def parse_content_range(content_range: str, resumed_from: int) -> int:
# last-byte-pos value, is invalid. The recipient of an invalid # last-byte-pos value, is invalid. The recipient of an invalid
# byte-content-range- spec MUST ignore it and any content # byte-content-range- spec MUST ignore it and any content
# transferred along with it." # transferred along with it."
if (first_byte_pos >= last_byte_pos if (first_byte_pos > last_byte_pos
or (instance_length is not None or (instance_length is not None
and instance_length <= last_byte_pos)): and instance_length <= last_byte_pos)):
raise ContentRangeError( raise ContentRangeError(

View File

@ -30,6 +30,9 @@ class TestDownloadUtils:
assert parse('bytes 100-199/200', 100) == 200 assert parse('bytes 100-199/200', 100) == 200
assert parse('bytes 100-199/*', 100) == 200 assert parse('bytes 100-199/*', 100) == 200
# single byte
assert parse('bytes 100-100/*', 100) == 101
# missing # missing
pytest.raises(ContentRangeError, parse, None, 100) pytest.raises(ContentRangeError, parse, None, 100)
@ -45,9 +48,6 @@ class TestDownloadUtils:
# invalid byte-range-resp-spec # invalid byte-range-resp-spec
pytest.raises(ContentRangeError, parse, 'bytes 100-99/199', 100) pytest.raises(ContentRangeError, parse, 'bytes 100-99/199', 100)
# invalid byte-range-resp-spec
pytest.raises(ContentRangeError, parse, 'bytes 100-100/*', 100)
@pytest.mark.parametrize('header, expected_filename', [ @pytest.mark.parametrize('header, expected_filename', [
('attachment; filename=hello-WORLD_123.txt', 'hello-WORLD_123.txt'), ('attachment; filename=hello-WORLD_123.txt', 'hello-WORLD_123.txt'),
('attachment; filename=".hello-WORLD_123.txt"', 'hello-WORLD_123.txt'), ('attachment; filename=".hello-WORLD_123.txt"', 'hello-WORLD_123.txt'),