summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2011-01-16 04:32:23 -0800
committerZac Medico <zmedico@gentoo.org>2011-01-16 12:34:16 -0800
commitef74ceb67eb5a52c4bc380967ba7a9e6ed49eb16 (patch)
tree6b8a97359ce0839bd3670fbe3632880e08bd8616
parentTweak PollScheduler signal handling. (diff)
downloadportage-ef74ceb67eb5a52c4bc380967ba7a9e6ed49eb16.tar.gz
portage-ef74ceb67eb5a52c4bc380967ba7a9e6ed49eb16.tar.bz2
portage-ef74ceb67eb5a52c4bc380967ba7a9e6ed49eb16.zip
CONTENTS: handle malformed sym entries
This will fix bug #351814.
-rw-r--r--pym/portage/dbapi/vartree.py12
1 files changed, 10 insertions, 2 deletions
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index 9955cde1d..7f76c4c28 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -1195,7 +1195,8 @@ class dblink(object):
_contents_re = re.compile(r'^(' + \
r'(?P<dir>(dev|dir|fif) (.+))|' + \
r'(?P<obj>(obj) (.+) (\S+) (\d+))|' + \
- r'(?P<sym>(sym) (.+) -> (.+) (\d+))' + \
+ r'(?P<sym>(sym) (.+) -> (.+) ((\d+)|(?P<oldsym>(' + \
+ '\(\d+, \d+L, \d+L, \d+, \d+, \d+, \d+L, \d+, (\d+), \d+\)))))' + \
r')$'
)
@@ -1378,6 +1379,9 @@ class dblink(object):
obj_index = contents_re.groupindex['obj']
dir_index = contents_re.groupindex['dir']
sym_index = contents_re.groupindex['sym']
+ # The old symlink format may exist on systems that have packages
+ # which were installed many years ago (see bug #351814).
+ oldsym_index = contents_re.groupindex['oldsym']
# CONTENTS files already contain EPREFIX
myroot = self.settings['ROOT']
if myroot == os.path.sep:
@@ -1405,8 +1409,12 @@ class dblink(object):
data = (m.group(base+1),)
elif m.group(sym_index) is not None:
base = sym_index
+ if m.group(oldsym_index) is None:
+ mtime = m.group(base+5)
+ else:
+ mtime = m.group(base+8)
#format: type, mtime, dest
- data = (m.group(base+1), m.group(base+4), m.group(base+3))
+ data = (m.group(base+1), mtime, m.group(base+3))
else:
# This won't happen as long the regular expression
# is written to only match valid entries.