Use a regular expression for SLOT validation inside vardbapi.aux_get().
authorZac Medico <zmedico@gentoo.org>
Wed, 30 Sep 2009 05:52:03 +0000 (05:52 -0000)
committerZac Medico <zmedico@gentoo.org>
Wed, 30 Sep 2009 05:52:03 +0000 (05:52 -0000)
svn path=/main/trunk/; revision=14467

pym/portage/dbapi/vartree.py
pym/portage/dep.py

index 9d1755e9ff131f834aa9a90370c060643a01fa05..93fbfe397e5538ba749f27ed6bd2c4bcb351917f 100644 (file)
@@ -12,7 +12,7 @@ import portage
 portage.proxy.lazyimport.lazyimport(globals(),
        'portage.checksum:_perform_md5_merge@perform_md5',
        'portage.dep:dep_getkey,isjustname,match_from_list,' + \
-               'use_reduce,paren_reduce',
+               'use_reduce,paren_reduce,_slot_re',
        'portage.elog:elog_process',
        'portage.elog.filtering:filter_mergephases,filter_unmergephases',
        'portage.locks:lockdir,unlockdir',
@@ -1251,10 +1251,12 @@ class vardbapi(dbapi):
                                        cache_data[aux_key] = mydata[aux_key]
                                self._aux_cache["packages"][mycpv] = (mydir_mtime, cache_data)
                                self._aux_cache["modified"].add(mycpv)
-               if not mydata['SLOT']:
-                       # Empty slot triggers InvalidAtom exceptions when generating slot
-                       # atoms for packages, so translate it to '0' here.
+
+               if _slot_re.match(mydata['SLOT']) is None:
+                       # Empty or invalid slot triggers InvalidAtom exceptions when
+                       # generating slot atoms for packages, so translate it to '0' here.
                        mydata['SLOT'] = _unicode_decode('0')
+
                return [mydata[x] for x in wants]
 
        def _aux_get(self, mycpv, wants, st=None):
index 8a2e781b4654ae84478cd4cf7785f7b4c380fe6a..70d95e4849d4bf049b39a933bd266cf61409d2a5 100644 (file)
@@ -808,7 +808,8 @@ def dep_getusedeps( depend ):
 
 # 2.1.3 A slot name may contain any of the characters [A-Za-z0-9+_.-].
 # It must not begin with a hyphen or a dot.
-_slot = r':([\w+][\w+.-]*)'
+_slot = r'([\w+][\w+.-]*)'
+_slot_re = re.compile('^' + _slot + '$', re.VERBOSE)
 
 _use = r'\[.*\]'
 _op = r'([=~]|[><]=?)'
@@ -816,7 +817,7 @@ _op = r'([=~]|[><]=?)'
 _atom_re = re.compile('^(?P<without_use>(?:' +
        '(?P<op>' + _op + _cpv + ')|' +
        '(?P<star>=' + _cpv + r'\*)|' +
-       '(?P<simple>' + _cp + '))(?:' + _slot + ')?)(' + _use + ')?$', re.VERBOSE)
+       '(?P<simple>' + _cp + '))(:' + _slot + ')?)(' + _use + ')?$', re.VERBOSE)
 
 def isvalidatom(atom, allow_blockers=False):
        """