diff options
-rw-r--r-- | pym/portage/__init__.py | 7 | ||||
-rw-r--r-- | pym/portage/dbapi/vartree.py | 7 |
2 files changed, 11 insertions, 3 deletions
diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py index 901ea2c96..d73ea6d5e 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -391,9 +391,12 @@ def getcwd(): return "/" getcwd() -def abssymlink(symlink): +def abssymlink(symlink, target=None): "This reads symlinks, resolving the relative symlinks, and returning the absolute." - mylink=os.readlink(symlink) + if target is None: + mylink = target + else: + mylink = os.readlink(symlink) if mylink[0] != '/': mydir=os.path.dirname(symlink) mylink=mydir+"/"+mylink diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index bafe13885..4d0a6dd4c 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -4013,7 +4013,12 @@ class dblink(object): os.unlink(mysrc) os.symlink(myto, mysrc) - myabsto = abssymlink(mysrc) + # Pass in the symlink target in order to bypass the + # os.readlink() call inside abssymlink(), since that + # call is unsafe if the merge encoding is not ascii + # or utf_8 (see bug #382021). + myabsto = abssymlink(mysrc, target=myto) + if myabsto.startswith(srcroot): myabsto = myabsto[len(srcroot):] myabsto = myabsto.lstrip(sep) |