Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions hyperframe/frame.py
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ def parse_body(self, data):
self.data = data[padding_data_length:len(data)-self.total_padding].tobytes()
self.body_len = len(data)

if self.total_padding >= self.body_len:
if self.total_padding and self.total_padding >= self.body_len:
raise InvalidPaddingError("Padding is too long.")

@property
Expand Down Expand Up @@ -396,7 +396,7 @@ def parse_body(self, data):
self.data = data[padding_data_length + 4:].tobytes()
self.body_len = len(data)

if self.total_padding >= self.body_len:
if self.total_padding and self.total_padding >= self.body_len:
raise InvalidPaddingError("Padding is too long.")


Expand Down Expand Up @@ -570,7 +570,7 @@ def parse_body(self, data):
self.body_len = len(data)
self.data = data[priority_data_length:len(data)-self.total_padding].tobytes()

if self.total_padding >= self.body_len:
if self.total_padding and self.total_padding >= self.body_len:
raise InvalidPaddingError("Padding is too long.")


Expand Down
27 changes: 27 additions & 0 deletions test/test_frames.py
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,15 @@ def test_data_frame_with_invalid_padding_fails_to_parse(self):
with pytest.raises(InvalidPaddingError):
decode_frame(data)

def test_data_frame_with_no_length_parses(self):
# Fixes issue with empty data frames raising InvalidPaddingError.
f = DataFrame(1)
f.data = b''
data = f.serialize()

new_frame = decode_frame(data)
assert new_frame.data == b''


class TestPriorityFrame(object):
payload = b'\x00\x00\x05\x02\x00\x00\x00\x00\x01\x80\x00\x00\x04\x40'
Expand Down Expand Up @@ -324,6 +333,15 @@ def test_push_promise_frame_with_invalid_padding_fails_to_parse(self):
with pytest.raises(InvalidPaddingError):
decode_frame(data)

def test_push_promise_frame_with_no_length_parses(self):
# Fixes issue with empty data frames raising InvalidPaddingError.
f = PushPromiseFrame(1)
f.data = b''
data = f.serialize()

new_frame = decode_frame(data)
assert new_frame.data == b''


class TestPingFrame(object):
def test_ping_frame_has_only_one_flag(self):
Expand Down Expand Up @@ -506,6 +524,15 @@ def test_headers_frame_with_invalid_padding_fails_to_parse(self):
with pytest.raises(InvalidPaddingError):
decode_frame(data)

def test_headers_frame_with_no_length_parses(self):
# Fixes issue with empty data frames raising InvalidPaddingError.
f = HeadersFrame(1)
f.data = b''
data = f.serialize()

new_frame = decode_frame(data)
assert new_frame.data == b''


class TestContinuationFrame(object):
def test_continuation_frame_flags(self):
Expand Down