Escape use flags before compiling regular expressions from them. Thanks
authorZac Medico <zmedico@gentoo.org>
Sat, 9 Aug 2008 10:05:23 +0000 (10:05 -0000)
committerZac Medico <zmedico@gentoo.org>
Sat, 9 Aug 2008 10:05:23 +0000 (10:05 -0000)
to pchrist for reporting.

svn path=/main/trunk/; revision=11364

pym/_emerge/__init__.py
pym/portage/__init__.py

index 4ce2af7939b526360ab8eb531ce5db2af19d252c..9389b8391f928f78d996e9c184444ca30ce66a4a 100644 (file)
@@ -1465,8 +1465,12 @@ class Package(Task):
                                except AttributeError:
                                        all = object.__getattribute__(self, "all")
                                        iuse_implicit = object.__getattribute__(self, "iuse_implicit")
-                                       self.regex = re.compile("^(%s)$" % "|".join(
-                                               chain((re.escape(x) for x in all), iuse_implicit)))
+                                       # Escape anything except ".*" which is supposed
+                                       # to pass through from _get_implicit_iuse()
+                                       regex = (re.escape(x) for x in chain(all, iuse_implicit))
+                                       regex = "^(%s)$" % "|".join(regex)
+                                       regex = regex.replace("\\.\\*", ".*")
+                                       self.regex = re.compile(regex)
                        return object.__getattribute__(self, name)
 
        def _get_hash_key(self):
index 15766f9a0b2f7cae52307d074a9e393f2233d461..72deec23c3c421456c9b16f5edf1c119d996df25 100644 (file)
@@ -2072,8 +2072,12 @@ class config(object):
                iuse_implicit = self._get_implicit_iuse()
                iuse_implicit.update(x.lstrip("+-") for x in iuse.split())
 
-               self.configdict["pkg"]["PORTAGE_IUSE"] = \
-                       "^(%s)$" % "|".join(sorted(iuse_implicit))
+               # Escape anything except ".*" which is supposed
+               # to pass through from _get_implicit_iuse()
+               regex = sorted(re.escape(x) for x in iuse_implicit)
+               regex = "^(%s)$" % "|".join(regex)
+               regex = regex.replace("\\.\\*", ".*")
+               self.configdict["pkg"]["PORTAGE_IUSE"] = regex
 
                ebuild_force_test = self.get("EBUILD_FORCE_TEST") == "1"
                if ebuild_force_test and ebuild_phase and \