commit: 4ca477d4cd5576b74a64145ec6c496e3a4b0420e Author: Jannik Glückert <jannik.glueckert <AT> gmail <DOT> com> AuthorDate: Sat Jun 14 14:17:18 2025 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Mon Oct 20 17:31:51 2025 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=4ca477d4
drop unicode mode from atom regexes Unicode has never been allowed in PMS Bug: https://bugs.gentoo.org/435934 Signed-off-by: Jannik Glückert <jannik.glueckert <AT> gmail.com> Part-of: https://github.com/gentoo/portage/pull/1445 Signed-off-by: Sam James <sam <AT> gentoo.org> lib/_emerge/is_valid_package_atom.py | 2 +- lib/portage/dbapi/__init__.py | 2 +- lib/portage/dep/__init__.py | 10 +++++----- lib/portage/tests/dep/test_atom.py | 1 + lib/portage/versions.py | 6 +++--- 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/lib/_emerge/is_valid_package_atom.py b/lib/_emerge/is_valid_package_atom.py index 0db8275c7c..9b8c8ae52d 100644 --- a/lib/_emerge/is_valid_package_atom.py +++ b/lib/_emerge/is_valid_package_atom.py @@ -7,7 +7,7 @@ from portage.dep import isvalidatom def insert_category_into_atom(atom, category): # Handle '*' character for "extended syntax" wildcard support. - alphanum = re.search(r"[\*\w]", atom, re.UNICODE) + alphanum = re.search(r"[\*\w]", atom, re.ASCII) if alphanum: ret = atom[: alphanum.start()] + f"{category}/" + atom[alphanum.start() :] else: diff --git a/lib/portage/dbapi/__init__.py b/lib/portage/dbapi/__init__.py index 9105227c77..e3522127ba 100644 --- a/lib/portage/dbapi/__init__.py +++ b/lib/portage/dbapi/__init__.py @@ -36,7 +36,7 @@ from _emerge.Package import Package class dbapi: - _category_re = re.compile(r"^\w[-.+\w]*$", re.UNICODE) + _category_re = re.compile(r"^\w[-.+\w]*$", re.ASCII) _categories: Optional[tuple[str, ...]] = None _use_mutable = False _known_keys = frozenset(auxdbkeys) diff --git a/lib/portage/dep/__init__.py b/lib/portage/dep/__init__.py index f8a238cd30..98999609b4 100644 --- a/lib/portage/dep/__init__.py +++ b/lib/portage/dep/__init__.py @@ -75,7 +75,7 @@ _op = r"([=~]|[><]=?)" _repo_separator = "::" _repo_name = r"[\w][\w-]*" -_repo_name_re = re.compile("^" + _repo_name + "$", re.UNICODE) +_repo_name_re = re.compile("^" + _repo_name + "$", re.ASCII) _repo = r"(?:" + _repo_separator + "(" + _repo_name + ")" + ")?" _extended_cat = r"[\w+*][\w+.*-]*" @@ -94,7 +94,7 @@ def _get_slot_dep_re(eapi_attrs: portage.eapi._eapi_attrs) -> re.Pattern: else: slot_re = _slot - slot_re = re.compile("^" + slot_re + "$", re.VERBOSE | re.UNICODE) + slot_re = re.compile("^" + slot_re + "$", re.VERBOSE | re.ASCII) _slot_dep_re_cache[cache_key] = slot_re return slot_re @@ -144,7 +144,7 @@ def _get_atom_re(eapi_attrs: portage.eapi._eapi_attrs) -> re.Pattern: + ")(" + _use + ")?\\Z", - re.VERBOSE | re.UNICODE, + re.VERBOSE | re.ASCII, ) return _atom_re @@ -179,7 +179,7 @@ def _get_atom_wildcard_re(eapi_attrs): + r"(?P<repo>" + _repo_name + r"))?\Z", - re.UNICODE, + re.ASCII, ) return _atom_wildcard_re @@ -1929,7 +1929,7 @@ def extended_cp_match(extended_cp, other_cp): extended_cp_re = _extended_cp_re_cache.get(extended_cp) if extended_cp_re is None: extended_cp_re = re.compile( - "^" + re.escape(extended_cp).replace(r"\*", "[^/]*") + "$", re.UNICODE + "^" + re.escape(extended_cp).replace(r"\*", "[^/]*") + "$", re.ASCII ) _extended_cp_re_cache[extended_cp] = extended_cp_re return extended_cp_re.match(other_cp) is not None diff --git a/lib/portage/tests/dep/test_atom.py b/lib/portage/tests/dep/test_atom.py index 3cc30b1dae..2b29f20ccb 100644 --- a/lib/portage/tests/dep/test_atom.py +++ b/lib/portage/tests/dep/test_atom.py @@ -153,6 +153,7 @@ class TestAtom(TestCase): tests_xfail = ( (Atom("sys-apps/portage"), False, False), ("cat/pkg\n", False, False), + ("cat/Ҙ", False, False), ("+cat/pkg", False, False), ("-cat/pkg", False, False), (".cat/pkg", False, False), diff --git a/lib/portage/versions.py b/lib/portage/versions.py index e7c09fc978..de8f801da9 100644 --- a/lib/portage/versions.py +++ b/lib/portage/versions.py @@ -90,7 +90,7 @@ def _get_slot_re(eapi_attrs: _eapi_attrs) -> typing.Pattern: else: slot_re = _slot - slot_re = re.compile("^" + slot_re + "$", re.VERBOSE | re.UNICODE) + slot_re = re.compile("^" + slot_re + "$", re.VERBOSE | re.ASCII) _slot_re_cache[cache_key] = slot_re return slot_re @@ -104,7 +104,7 @@ def _get_pv_re(eapi_attrs: _eapi_attrs) -> typing.Pattern: if _pv_re is not None: return _pv_re - _pv_re = re.compile(r"^" + _pv + r"$", re.VERBOSE | re.UNICODE) + _pv_re = re.compile(r"^" + _pv + r"$", re.VERBOSE | re.ASCII) return _pv_re @@ -315,7 +315,7 @@ def _pkgsplit(mypkg: str, eapi: Any = None) -> Optional[tuple[str, str, str]]: return (m.group("pn"), m.group("ver"), rev) -_cat_re = re.compile(f"^{_cat}$", re.UNICODE) +_cat_re = re.compile(f"^{_cat}$", re.ASCII) _missing_cat = "null"
