Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-regex for openSUSE:Factory checked in at 2026-08-24 12:01:38 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-regex (Old) and /work/SRC/openSUSE:Factory/.python-regex.new.1258 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-regex" Mon Aug 24 12:01:38 2026 rev:36 rq:1373054 version:2026.7.19 Changes: -------- --- /work/SRC/openSUSE:Factory/python-regex/python-regex.changes 2026-07-07 21:00:17.608292189 +0200 +++ /work/SRC/openSUSE:Factory/.python-regex.new.1258/python-regex.changes 2026-08-24 12:02:20.675183950 +0200 @@ -1,0 +2,15 @@ +Sat Aug 22 10:03:23 UTC 2026 - Dirk Müller <[email protected]> + +- update to 2026.7.19: + * Git issue 607: SIGSEGV: NULL pointer dereference in + `basic_match()` when `(?R)`/`(?0)` recursion is used inside a + fuzzy-matching quantifier + * Git issue 608: SIGSEGV: out-of-bounds read in + `bytes1_char_at()` with `DOTALL` + a fuzzy constraint + + `(?r)` reverse-direction matching + * Clarified that the POSIX flag makes it look for only the + longest overall match. + * Git issue 606: `regex`'s compiled-pattern cache eviction is + not free-threading-safe + +------------------------------------------------------------------- Old: ---- regex-2026.6.28.tar.gz New: ---- regex-2026.7.19.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-regex.spec ++++++ --- /var/tmp/diff_new_pack.OUAWlz/_old 2026-08-24 12:02:22.742256875 +0200 +++ /var/tmp/diff_new_pack.OUAWlz/_new 2026-08-24 12:02:22.745256981 +0200 @@ -18,7 +18,7 @@ %{?sle15_python_module_pythons} Name: python-regex -Version: 2026.6.28 +Version: 2026.7.19 Release: 0 Summary: Alternative regular expression module for Python License: Apache-2.0 ++++++ regex-2026.6.28.tar.gz -> regex-2026.7.19.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regex-2026.6.28/PKG-INFO new/regex-2026.7.19/PKG-INFO --- old/regex-2026.6.28/PKG-INFO 2026-06-28 20:53:19.430510800 +0200 +++ new/regex-2026.7.19/PKG-INFO 2026-07-19 01:14:48.617783300 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: regex -Version: 2026.6.28 +Version: 2026.7.19 Summary: Alternative regular expression module, to replace re. Author-email: Matthew Barnett <[email protected]> License-Expression: Apache-2.0 AND CNRI-Python @@ -13,7 +13,6 @@ Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 Classifier: Programming Language :: Python :: 3.14 -Classifier: Programming Language :: Python :: 3.15 Classifier: Topic :: Scientific/Engineering :: Information Analysis Classifier: Topic :: Software Development :: Libraries :: Python Modules Classifier: Topic :: Text Processing @@ -199,6 +198,8 @@ The POSIX standard for regex is to return the leftmost longest match. This can be turned on using the ``POSIX`` flag. +It looks for the longest overall match. It doesn't look for the longest match for each group. + .. sourcecode:: python >>> # Normal matching. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regex-2026.6.28/README.rst new/regex-2026.7.19/README.rst --- old/regex-2026.6.28/README.rst 2026-06-28 20:53:17.000000000 +0200 +++ new/regex-2026.7.19/README.rst 2026-07-19 01:14:45.000000000 +0200 @@ -174,6 +174,8 @@ The POSIX standard for regex is to return the leftmost longest match. This can be turned on using the ``POSIX`` flag. +It looks for the longest overall match. It doesn't look for the longest match for each group. + .. sourcecode:: python >>> # Normal matching. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regex-2026.6.28/changelog.txt new/regex-2026.7.19/changelog.txt --- old/regex-2026.6.28/changelog.txt 2026-06-28 20:53:17.000000000 +0200 +++ new/regex-2026.7.19/changelog.txt 2026-07-19 01:14:45.000000000 +0200 @@ -1,3 +1,14 @@ +Version: 2026.7.19 + + Git issue 607: SIGSEGV: NULL pointer dereference in `basic_match()` when `(?R)`/`(?0)` recursion is used inside a fuzzy-matching quantifier + Git issue 608: SIGSEGV: out-of-bounds read in `bytes1_char_at()` with `DOTALL` + a fuzzy constraint + `(?r)` reverse-direction matching + +Version: 2026.7.10 + + Clarified that the POSIX flag makes it look for only the longest overall match. + + Git issue 606: `regex`'s compiled-pattern cache eviction is not free-threading-safe + Version: 2026.6.28 Git issue 604: regex fails on free-threading python because setlocale is not thread-safe diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regex-2026.6.28/pyproject.toml new/regex-2026.7.19/pyproject.toml --- old/regex-2026.6.28/pyproject.toml 2026-06-28 20:53:17.000000000 +0200 +++ new/regex-2026.7.19/pyproject.toml 2026-07-19 01:14:45.000000000 +0200 @@ -4,7 +4,7 @@ [project] name = "regex" -version = "2026.6.28" +version = "2026.7.19" description = "Alternative regular expression module, to replace re." readme = "README.rst" authors = [ @@ -22,7 +22,6 @@ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", - "Programming Language :: Python :: 3.15", "Topic :: Scientific/Engineering :: Information Analysis", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Text Processing", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regex-2026.6.28/regex/_main.py new/regex-2026.7.19/regex/_main.py --- old/regex-2026.6.28/regex/_main.py 2026-06-28 20:53:17.000000000 +0200 +++ new/regex-2026.7.19/regex/_main.py 2026-07-19 01:14:45.000000000 +0200 @@ -244,7 +244,7 @@ "VERSION1", "X", "VERBOSE", "W", "WORD", "error", "Regex", "__version__", "__doc__", "RegexFlag"] -__version__ = "2026.6.28" +__version__ = "2026.7.19" # -------------------------------------------------------------------- # Public interface. @@ -364,8 +364,9 @@ def purge(): "Clear the regular expression cache" - _cache.clear() - _locale_sensitive.clear() + with _cache_lock: + _cache.clear() + _locale_sensitive.clear() # Whether to cache all patterns. _cache_all = True @@ -674,7 +675,9 @@ # Store this regular expression and named list. pattern_key = (pattern, type(pattern), flags, args_needed, DEFAULT_VERSION, pattern_locale) - _cache[pattern_key] = compiled_pattern + + with _cache_lock: + _cache[pattern_key] = compiled_pattern # Store what keyword arguments are needed. _named_args[args_key] = args_needed diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regex-2026.6.28/regex.egg-info/PKG-INFO new/regex-2026.7.19/regex.egg-info/PKG-INFO --- old/regex-2026.6.28/regex.egg-info/PKG-INFO 2026-06-28 20:53:19.000000000 +0200 +++ new/regex-2026.7.19/regex.egg-info/PKG-INFO 2026-07-19 01:14:48.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: regex -Version: 2026.6.28 +Version: 2026.7.19 Summary: Alternative regular expression module, to replace re. Author-email: Matthew Barnett <[email protected]> License-Expression: Apache-2.0 AND CNRI-Python @@ -13,7 +13,6 @@ Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 Classifier: Programming Language :: Python :: 3.14 -Classifier: Programming Language :: Python :: 3.15 Classifier: Topic :: Scientific/Engineering :: Information Analysis Classifier: Topic :: Software Development :: Libraries :: Python Modules Classifier: Topic :: Text Processing @@ -199,6 +198,8 @@ The POSIX standard for regex is to return the leftmost longest match. This can be turned on using the ``POSIX`` flag. +It looks for the longest overall match. It doesn't look for the longest match for each group. + .. sourcecode:: python >>> # Normal matching. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regex-2026.6.28/src/_regex.c new/regex-2026.7.19/src/_regex.c --- old/regex-2026.6.28/src/_regex.c 2026-06-28 20:53:17.000000000 +0200 +++ new/regex-2026.7.19/src/_regex.c 2026-07-19 01:14:45.000000000 +0200 @@ -8395,6 +8395,7 @@ test = next->test; node = next->node; + new_position->node = node; if (state->reverse) { if (start_pos < state->slice_start) { @@ -9188,7 +9189,7 @@ if (test == node) { text_pos = start_pos + test->step; - if (test->next_1.node) { + if (test->next_1.node && state->slice_start <= text_pos && text_pos <= state->slice_end) { int status; status = try_match(state, &test->next_1, text_pos, new_position); @@ -13430,8 +13431,12 @@ repeat->tail_guard_list.last_text_pos = -1; } - /* Call a group, skipping its CALL_REF node. */ - node = pattern->call_ref_info[index].node->next_1.node; + /* Call a group, skipping its CALL_REF node. Be aware that we might be calling the entire pattern. */ + if (pattern->call_ref_info[index].node) { + node = pattern->call_ref_info[index].node->next_1.node; + } else { + node = pattern->start_node; + } break; } case RE_OP_GROUP_EXISTS: /* Capture group exists. */
