From 5d65c8a727eb3e81d5681ec0be84e02af0f9b20b Mon Sep 17 00:00:00 2001 From: Matthew Barnett Date: Tue, 16 Apr 2024 19:33:07 +0100 Subject: [PATCH] Git issue 525: segfault when fuzzy matching empty list --- regex_3/_regex_core.py | 3 +++ regex_3/regex.py | 2 +- regex_3/test_regex.py | 3 +++ setup.py | 2 +- 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/regex_3/_regex_core.py b/regex_3/_regex_core.py index c2314f8..550e922 100644 --- a/regex_3/_regex_core.py +++ b/regex_3/_regex_core.py @@ -2111,6 +2111,9 @@ def get_firstset(self, reverse): return fs or set([None]) def _compile(self, reverse, fuzzy): + if not self.branches: + return [] + code = [(OP.BRANCH, )] for b in self.branches: code.extend(b.compile(reverse, fuzzy)) diff --git a/regex_3/regex.py b/regex_3/regex.py index f8cc177..e467685 100644 --- a/regex_3/regex.py +++ b/regex_3/regex.py @@ -241,7 +241,7 @@ "VERSION1", "X", "VERBOSE", "W", "WORD", "error", "Regex", "__version__", "__doc__", "RegexFlag"] -__version__ = "2.5.140" +__version__ = "2.5.141" # -------------------------------------------------------------------- # Public interface. diff --git a/regex_3/test_regex.py b/regex_3/test_regex.py index 21cdb8a..9f902c0 100644 --- a/regex_3/test_regex.py +++ b/regex_3/test_regex.py @@ -4326,6 +4326,9 @@ def test_hg_bugs(self): self.assertEqual(regex.match(r'(?(?!a).|..)', 'ab').span(), (0, 2)) self.assertEqual(regex.match(r'(?(?!b).|..)', 'ab').span(), (0, 1)) + # Git issue 525: segfault when fuzzy matching empty list + self.assertEqual(regex.match(r"(\L){e<=5}", "blah", foo=[]).span(), (0, 0)) + def test_fuzzy_ext(self): self.assertEqual(bool(regex.fullmatch(r'(?r)(?:a){e<=1:[a-z]}', 'e')), True) diff --git a/setup.py b/setup.py index 2568126..45e8140 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ setup( name='regex', - version='2023.12.25', + version='2024.4.16', description='Alternative regular expression module, to replace re.', long_description=long_description, long_description_content_type='text/x-rst',