h2 icon indicating copy to clipboard operation
h2 copied to clipboard

Max inbound stream error logging is incorrect

Open stephenc-pace opened this issue 2 years ago • 0 comments

In the _recv_headers_frame code, a check is made on the number if inbound streams. If this is above the limit, then a TooManyStreamsError is raised.

The error text and logged value is incorrect and has likely been copy pasted from the other similar error check.

    def _receive_headers_frame(self, frame):
        """
        Receive a headers frame on the connection.
        """
        # If necessary, check we can open the stream. Also validate that the
        # stream ID is valid.
        if frame.stream_id not in self.streams:
            max_open_streams = self.local_settings.max_concurrent_streams
            if (self.open_inbound_streams + 1) > max_open_streams:
                raise TooManyStreamsError(
                    "Max outbound streams is %d, %d open" %
                    (max_open_streams, self.open_outbound_streams)
                )

This should say "Max inbound streams" and log (max_open_streams, self.open_inbound_streams)

It would probably also be beneficial to take a local copy of the outbound stream count and use that in the log message as the property accessor has side effects.

https://github.com/python-hyper/h2/blob/bc005afad8302549facf5afde389a16759b2ccdb/src/h2/connection.py#L1545

stephenc-pace avatar Mar 10 '23 12:03 stephenc-pace