From: Zac Medico Date: Sat, 9 Sep 2006 23:11:59 +0000 (-0000) Subject: For bug #80846, prevent false collisions caused by symlinks. Thanks to Thomas Bettle... X-Git-Tag: v2.1.1-r1~90 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=3ba3548665d60542ae6b8cd856240f55f3ed58ad;p=portage.git For bug #80846, prevent false collisions caused by symlinks. Thanks to Thomas Bettler for the initial patch. svn path=/main/trunk/; revision=4431 --- diff --git a/pym/portage.py b/pym/portage.py index a39e16ee4..14183f22b 100644 --- a/pym/portage.py +++ b/pym/portage.py @@ -5574,6 +5574,7 @@ class dblink: self.updateprotect = protect_obj.updateprotect self.isprotected = protect_obj.isprotected self.contentscache=[] + self._contents_inodes = None def lockdb(self): if self.lock_num == 0: @@ -5856,13 +5857,24 @@ class dblink: destfile = normalize_path( os.path.join(destroot, filename.lstrip(os.path.sep))) try: - os.lstat(destfile) # lexists requires >=python-2.4 + mylstat = os.lstat(destfile) except OSError: return True pkgfiles = self.getcontents() if pkgfiles and filename in pkgfiles: return True + if pkgfiles: + if self._contents_inodes is None: + self._contents_inodes = set() + for x in pkgfiles: + try: + lstat = os.lstat(x) + self._contents_inodes.add((lstat.st_dev, lstat.st_ino)) + except OSError: + pass + if (mylstat.st_dev, mylstat.st_ino) in self._contents_inodes: + return True return False