@@ -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
@@ -620,7 +620,7 @@ def _body_repr(self) -> str:
620620
621621 def serialize_body (self ) -> bytes :
622622 data = _STRUCT_LL .pack (
623- self .last_stream_id & 0x7FFFFFFF ,
623+ self .last_stream_id & 0x7FFFFFFF , # mask off the reserved bit, RFC 9113, Section 6.8
624624 self .error_code ,
625625 )
626626 data += self .additional_data
@@ -636,6 +636,7 @@ def parse_body(self, data: memoryview) -> None:
636636 msg = "Invalid GOAWAY body."
637637 raise InvalidFrameError (msg ) from err
638638
639+ # mask off the reserved bit, RFC 9113, Section 6.8
639640 self .last_stream_id = self .last_stream_id & 0x7FFFFFFF
640641 self .body_len = len (data )
641642
@@ -675,7 +676,9 @@ def _body_repr(self) -> str:
675676 return f"window_increment={ self .window_increment } "
676677
677678 def serialize_body (self ) -> bytes :
678- return _STRUCT_L .pack (self .window_increment & 0x7FFFFFFF )
679+ return _STRUCT_L .pack (
680+ self .window_increment & 0x7FFFFFFF , # mask off the reserved bit, RFC 9113, Section 6.9
681+ )
679682
680683 def parse_body (self , data : memoryview ) -> None :
681684 if len (data ) > 4 :
@@ -688,6 +691,7 @@ def parse_body(self, data: memoryview) -> None:
688691 msg = "Invalid WINDOW_UPDATE body"
689692 raise InvalidFrameError (msg ) from err
690693
694+ # mask off the reserved bit, RFC 9113, Section 6.9
691695 self .window_increment = self .window_increment & 0x7FFFFFFF
692696
693697 if not 1 <= self .window_increment <= 2 ** 31 - 1 :
@@ -907,7 +911,7 @@ def serialize(self) -> bytes:
907911 self .body_len & 0xFF ,
908912 self .type ,
909913 flags ,
910- self .stream_id & 0x7FFFFFFF , # Stream ID is 32 bits.
914+ self .stream_id & 0x7FFFFFFF , # mask off the reserved bit, RFC 9113, Section 4.1
911915 )
912916
913917 return header + self .body
0 commit comments