@@ -132,7 +132,7 @@ def parse_frame_header(header: memoryview, strict: bool = False) -> tuple[Frame,
132132 length = (fields [0 ] << 8 ) + fields [1 ]
133133 typ_e = fields [2 ]
134134 flags = fields [3 ]
135- stream_id = fields [4 ] & 0x7FFFFFFF
135+ stream_id = fields [4 ] & 0x7FFFFFFF # mask off the reserved bit, RFC 9113, Section 4.1
136136
137137 try :
138138 frame = FRAMES [typ_e ](stream_id )
@@ -172,7 +172,7 @@ def serialize(self) -> bytes:
172172 self .body_len & 0xFF ,
173173 self .type ,
174174 flags ,
175- self .stream_id & 0x7FFFFFFF , # Stream ID is 32 bits.
175+ self .stream_id & 0x7FFFFFFF , # mask off the reserved bit, RFC 9113, Section 4.1
176176 )
177177
178178 return header + body
@@ -271,7 +271,7 @@ def parse_priority_data(self, data: memoryview) -> int:
271271 raise InvalidFrameError (msg ) from err
272272
273273 self .exclusive = bool (self .depends_on >> 31 )
274- self .depends_on &= 0x7FFFFFFF
274+ self .depends_on &= 0x7FFFFFFF # mask off the exclusive bit, RFC 9113, Section 6.3
275275 return 5
276276
277277
@@ -623,7 +623,7 @@ def _body_repr(self) -> str:
623623
624624 def serialize_body (self ) -> bytes :
625625 data = _STRUCT_LL .pack (
626- self .last_stream_id & 0x7FFFFFFF ,
626+ self .last_stream_id & 0x7FFFFFFF , # mask off the reserved bit, RFC 9113, Section 6.8
627627 self .error_code ,
628628 )
629629 data += self .additional_data
@@ -639,6 +639,7 @@ def parse_body(self, data: memoryview) -> None:
639639 msg = "Invalid GOAWAY body."
640640 raise InvalidFrameError (msg ) from err
641641
642+ # mask off the reserved bit, RFC 9113, Section 6.8
642643 self .last_stream_id = self .last_stream_id & 0x7FFFFFFF
643644 self .body_len = len (data )
644645
@@ -678,7 +679,9 @@ def _body_repr(self) -> str:
678679 return f"window_increment={ self .window_increment } "
679680
680681 def serialize_body (self ) -> bytes :
681- return _STRUCT_L .pack (self .window_increment & 0x7FFFFFFF )
682+ return _STRUCT_L .pack (
683+ self .window_increment & 0x7FFFFFFF , # mask off the reserved bit, RFC 9113, Section 6.9
684+ )
682685
683686 def parse_body (self , data : memoryview ) -> None :
684687 if len (data ) > 4 :
@@ -691,6 +694,7 @@ def parse_body(self, data: memoryview) -> None:
691694 msg = "Invalid WINDOW_UPDATE body"
692695 raise InvalidFrameError (msg ) from err
693696
697+ # mask off the reserved bit, RFC 9113, Section 6.9
694698 self .window_increment = self .window_increment & 0x7FFFFFFF
695699
696700 if not 1 <= self .window_increment <= 2 ** 31 - 1 :
@@ -910,7 +914,7 @@ def serialize(self) -> bytes:
910914 self .body_len & 0xFF ,
911915 self .type ,
912916 flags ,
913- self .stream_id & 0x7FFFFFFF , # Stream ID is 32 bits.
917+ self .stream_id & 0x7FFFFFFF , # mask off the reserved bit, RFC 9113, Section 4.1
914918 )
915919
916920 return header + self .body
0 commit comments