From ba28630c981203e996114cfc4f12b484d2f021e2 Mon Sep 17 00:00:00 2001 From: Syncrain <71864702+syncrain@users.noreply.github.com> Date: Thu, 11 Jun 2026 13:17:00 +0530 Subject: [PATCH] Validate reversed telnet console port ranges (#7593) --- scrapy/utils/reactor.py | 2 ++ tests/test_extension_telnet.py | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/scrapy/utils/reactor.py b/scrapy/utils/reactor.py index 7ab58093a..c60bb215d 100644 --- a/scrapy/utils/reactor.py +++ b/scrapy/utils/reactor.py @@ -33,6 +33,8 @@ def listen_tcp(portrange: list[int], host: str, factory: ServerFactory) -> Port: if len(portrange) > 2: raise ValueError(f"invalid portrange: {portrange}") + if len(portrange) == 2 and portrange[0] > portrange[1]: + raise ValueError(f"invalid portrange: {portrange}") if not portrange: return reactor.listenTCP(0, factory, interface=host) # type: ignore[no-any-return] if len(portrange) == 1: diff --git a/tests/test_extension_telnet.py b/tests/test_extension_telnet.py index f1c86ce62..3f9135867 100644 --- a/tests/test_extension_telnet.py +++ b/tests/test_extension_telnet.py @@ -53,3 +53,9 @@ class TestTelnetExtension: d = portal.login(creds, None, ITelnetProtocol) yield d console.stop_listening() + + def test_invalid_reversed_portrange(self): + settings = {"TELNETCONSOLE_PORT": [2, 1]} + console = TelnetConsole(get_crawler(settings_dict=settings)) + with pytest.raises(ValueError, match=r"invalid portrange: \[2, 1\]"): + console.start_listening()