From 172e50c74825d8d0f4605dcc30c0922bf7eb115b Mon Sep 17 00:00:00 2001 From: Jean Date: Sun, 12 Jul 2026 00:52:56 +0000 Subject: [PATCH] Skip registering passwords too long for one IRC line The irctest controller's registerUser sends NickServ REGISTER as a single PRIVMSG, so a password that overflows the 512-byte line limit gets truncated on the wire and can never match a later SASL login. Raise NotImplementedByController for those, like the reference services controllers, so such cases skip instead of failing spuriously. --- testing/fedserv_services.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/testing/fedserv_services.py b/testing/fedserv_services.py index 233cab9..19efc22 100644 --- a/testing/fedserv_services.py +++ b/testing/fedserv_services.py @@ -15,8 +15,10 @@ real network. See https://github.com/progval/irctest """ import os import shutil -from typing import Type +from typing import Optional, Type +import irctest.cases +import irctest.runner from irctest.basecontrollers import BaseServicesController, DirectoryBasedController CONFIG = """\ @@ -52,6 +54,22 @@ class FedservController(BaseServicesController, DirectoryBasedController): self.proc = self.execute([binary, "config.toml"], cwd=self.directory) + def registerUser( + self, + case: irctest.cases.BaseServerTestCase, + username: str, + password: Optional[str] = None, + ) -> None: + # NickServ REGISTER is a single PRIVMSG, so a password that would push + # the line past the 512-byte IRC limit can't be registered intact. Like + # the reference services controllers, skip rather than silently truncate. + assert password + if len(password.encode()) > 400: + raise irctest.runner.NotImplementedByController( + "Passwords too long to REGISTER in a single IRC message" + ) + super().registerUser(case, username, password) + def get_irctest_controller_class() -> Type[FedservController]: return FedservController