From c6ab5d28e287b9f0c74269ad295fcdf9dc03fe08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C5=82awomir=20Nizio?= Date: Sat, 9 Nov 2019 12:20:46 +0100 Subject: [PATCH] [entropy.core] fix DependencyRewriter with or-dependencies --- lib/entropy/dep.py | 11 ++++++++++- lib/tests/dep.py | 9 +++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/lib/entropy/dep.py b/lib/entropy/dep.py index 1f6b5684f..e38b90b6a 100644 --- a/lib/entropy/dep.py +++ b/lib/entropy/dep.py @@ -1346,7 +1346,16 @@ class DependencyRewriter(object): new_deps = [] for dep in self.deps: clean_dep = dep_getkey(dep) - dep_prefix, dep_postfix = dep.split(clean_dep, 1) + + try: + dep_prefix, dep_postfix = dep.split(clean_dep, 1) + except ValueError: + # String could not be split into two parts; + # dep_getkey(dep) is not in dep. + # E.g. dep_getkey("a/b[c];d/e[f]") => a/b;d/e + # Consider the rule as not matched. + new_deps.append(dep) + continue use_flags_list, clean_use_flags_list = self._use_flags_from_dep(dep_postfix) diff --git a/lib/tests/dep.py b/lib/tests/dep.py index f17894bd8..2e50ca347 100644 --- a/lib/tests/dep.py +++ b/lib/tests/dep.py @@ -534,6 +534,15 @@ class DependencyRewriterBasicAttrsTests(unittest.TestCase, MatchedChangedTestsMi self._expected_changed = False self._validate() + def test_not_matched_for_complex_dep(self): + # entropy.dep.dep_getkey("a/b[c];d/e[f]") => a/b;d/e + # Something like this would make it crash. + self._rule = "from-dep=x11-misc/lightdm to-dep=x11-misc/lightdm" + self._deps = ["a/b[c];d/e[f]"] + self._expected_matched = False + self._expected_changed = False + self._validate() + if __name__ == '__main__': unittest.main()