Hello, Please see attached tarkill.tar.gz and buildout profile.
This tarball containts dead link:
ls -l tarkill
lrwxrwxrwx 1 luke users 4 2010-11-18 19:56 kill -> kill
After running attached buildout profile and having python shell
setuptools will enter infinite loop:
>>> import sys
>>> sys.version_info
sys.version_info(major=2, minor=7, micro=0, releaselevel='final', serial=0)
>>> import tempfile
>>> import setuptools.archive_util
>>> tempdir = tempfile.mkdtemp()
>>> setuptools.archive_util.unpack_archive('tarkill.tar.gz', tempdir)
^CTraceback (most recent call last):
File "<console>", line 1, in <module>
File
"/srv/home/luke/python2.7/setup/eggs/setuptools-0.6c12dev_r85381-py2.7.egg/setuptools/archive_util.py",
line 67, in unpack_archive
driver(filename, extract_dir, progress_filter)
File
"/srv/home/luke/python2.7/setup/eggs/setuptools-0.6c12dev_r85381-py2.7.egg/setuptools/archive_util.py",
line 190, in unpack_tarfile
member = tarobj._getmember(linkpath)
File "/srv/home/luke/python2.7/parts/python2.7/lib/python2.7/tarfile.py",
line 2357, in _getmember
members = self.getmembers()
File "/srv/home/luke/python2.7/parts/python2.7/lib/python2.7/tarfile.py",
line 1801, in getmembers
self._check()
KeyboardInterrupt
Attached workaround which breaks the loop, but I think that such
deadlink shall be created, just like tar does it.
Regards,
Luke
--
Łukasz Nowak IT Specialist [email protected] http://lnowak.com/
Skype: Shufla jid: [email protected] gg: 1157726
``Use the Source, Luke...''
buildout.cfg
Description: Binary data
diff -ur setuptools-0.6c12dev_r85381-py2.7.egg.orig/setuptools/archive_util.py setuptools-0.6c12dev_r85381-py2.7.egg/setuptools/archive_util.py
--- setuptools-0.6c12dev_r85381-py2.7.egg.orig/setuptools/archive_util.py 2010-11-18 19:54:36.978922115 +0000
+++ setuptools-0.6c12dev_r85381-py2.7.egg/setuptools/archive_util.py 2010-11-18 20:04:41.523054803 +0000
@@ -187,6 +187,10 @@
if member.issym():
linkpath = posixpath.join(posixpath.dirname(member.name), linkpath)
linkpath = posixpath.normpath(linkpath)
+ if member.name == linkpath:
+ # *BAD* workaround for bad archives with deadlinks file -> file
+ member = None
+ break
member = tarobj._getmember(linkpath)
if member is not None and (member.isfile() or member.isdir()):
Files setuptools-0.6c12dev_r85381-py2.7.egg.orig/setuptools/archive_util.pyc and setuptools-0.6c12dev_r85381-py2.7.egg/setuptools/archive_util.pyc differ
tarkill.tar.gz
Description: GNU Zip compressed data
_______________________________________________ Distutils-SIG maillist - [email protected] http://mail.python.org/mailman/listinfo/distutils-sig
