diff --git a/src/ircutils.py b/src/ircutils.py index 227f2804f..df2d08604 100644 --- a/src/ircutils.py +++ b/src/ircutils.py @@ -64,7 +64,7 @@ def warning(s, *args): """Prints a debug string. Most likely replaced by our logging debug.""" print('###', s % args) -userHostmaskRe = re.compile(r'^(?P\S+?)!(?P\S+?)@(?P\S+)$') +userHostmaskRe = re.compile(r'^(?P\S+?)!(?P\S+)@(?P\S+?)$') def isUserHostmask(s): """Returns whether or not the string s is a valid User hostmask.""" return userHostmaskRe.match(s) is not None diff --git a/test/test_ircutils.py b/test/test_ircutils.py index 55269afe5..2c3ec71a4 100644 --- a/test/test_ircutils.py +++ b/test/test_ircutils.py @@ -118,11 +118,18 @@ class FunctionsTestCase(SupyTestCase): self.assertEqual(ircutils.splitHostmask('foo!bar@baz'), ('foo', 'bar', 'baz')) - # Extravagant cases that never happen on real networks: + # This ones are technically allowed by RFC1459, but never happens in + # practice: + self.assertEqual(ircutils.splitHostmask('foo!bar!qux@quux'), + ('foo', 'bar!qux', 'quux')) + self.assertEqual(ircutils.splitHostmask('foo!bar@baz@quux'), + ('foo', 'bar@baz', 'quux')) + self.assertEqual(ircutils.splitHostmask('foo!bar@baz!qux@quux'), + ('foo', 'bar@baz!qux', 'quux')) + + # And this one in garbage, let's just make sure we don't crash: self.assertEqual(ircutils.splitHostmask('foo!bar@baz!qux'), ('foo', 'bar', 'baz!qux')) - self.assertEqual(ircutils.splitHostmask('foo!bar@baz!qux@quux'), - ('foo', 'bar', 'baz!qux@quux')) def testIsChannel(self): self.assertTrue(ircutils.isChannel('#'))