diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 750102f..9f9a582 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -19,7 +19,7 @@ dev **Bugfixes** -- +- Recalculate the body length when serializing an ExtensionFrame. 6.1.0 (2025-01-22) ------------------ diff --git a/src/hyperframe/frame.py b/src/hyperframe/frame.py index 5bab673..3a51eed 100644 --- a/src/hyperframe/frame.py +++ b/src/hyperframe/frame.py @@ -905,6 +905,8 @@ def serialize(self) -> bytes: user code: it exists only as a helper method if frames need to be reconstituted. """ + self.body_len = len(self.body) + # Build the frame header. # First, get the flags. flags = self.flag_byte diff --git a/tests/test_frames.py b/tests/test_frames.py index b683354..60c2872 100644 --- a/tests/test_frames.py +++ b/tests/test_frames.py @@ -995,3 +995,16 @@ class TestExtensionFrame: def test_repr(self): f = ExtensionFrame(0xFF, 1, 42, b'hello') assert repr(f).endswith("type=255, flag_byte=42, body=") + + +@pytest.mark.parametrize('body', [b'', b'hello', b'x' * 256]) +def test_extension_frame_serialized_body_length(body): + frame = ExtensionFrame(0xFF, 1, 42, body) + decoded = decode_frame(frame.serialize()) + assert decoded.body == body + assert decoded.body_len == len(body) + assert decoded.flag_byte == 42 + frame.body = b'replacement' + decoded = decode_frame(frame.serialize()) + assert decoded.body == b'replacement' + assert decoded.body_len == len(frame.body)