provides details of failed regex compilation in the error message we throw in Regex-constructor (it's good to know what exactly is wrong)

0.10
sebres 2022-09-08 15:49:57 +02:00
parent 35eb9acaee
commit 5e74499ffd
2 changed files with 11 additions and 3 deletions

View File

@ -145,9 +145,9 @@ class Regex:
n = ALTNAME_CRE.match(k).group(1)
self._altValues[k] = n
self._altValues = list(self._altValues.items()) if len(self._altValues) else None
except sre_constants.error:
raise RegexException("Unable to compile regular expression '%s'" %
regex)
except sre_constants.error as e:
raise RegexException("Unable to compile regular expression '%s':\n%s" %
(regex, e))
# set fetch handler depending on presence of alternate tags:
self.getGroups = self._getGroupsWithAlt if self._altValues else self._getGroups

View File

@ -133,6 +133,13 @@ class Fail2banRegexTest(LogCaptureTestCase):
"test", r".** from <HOST>$"
))
self.assertLogged("Unable to compile regular expression")
self.assertLogged("multiple repeat", "at position 2", all=False); # details of failed compilation
self.pruneLog()
self.assertFalse(_test_exec(
"test", r"^(?:(?P<type>A)|B)? (?(typo)...) from <ADDR>"
))
self.assertLogged("Unable to compile regular expression")
self.assertLogged("unknown group name: 'typo'", "at position 23", all=False); # details of failed compilation
def testWrongIngnoreRE(self):
self.assertFalse(_test_exec(
@ -140,6 +147,7 @@ class Fail2banRegexTest(LogCaptureTestCase):
"test", r".*? from <HOST>$", r".**"
))
self.assertLogged("Unable to compile regular expression")
self.assertLogged("multiple repeat", "at position 2", all=False); # details of failed compilation
def testWrongFilterOptions(self):
self.assertFalse(_test_exec(