python-hyper / h2

HTTP/2 State-Machine based protocol implementation
https://h2.readthedocs.io/en/stable
MIT License
963 stars 151 forks source link

Max inbound stream error logging is incorrect #1278

Open stephenc-pace opened 1 year ago

stephenc-pace commented 1 year ago

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