From: Ka-Ping Yee Date: Fri, 13 Apr 2001 13:53:07 +0000 (+0000) Subject: Add inode checks to detect circular symbolic links (so that the X-Git-Tag: v2.1c1~30 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=eca15c1fb19c94d3a424156d072266c8d327663d;p=thirdparty%2FPython%2Fcpython.git Add inode checks to detect circular symbolic links (so that the Tools/idle/idlelib link doesn't cause an infinite loop -- aack!) --- diff --git a/Lib/pydoc.py b/Lib/pydoc.py index e5f7d800cbfa..5f372258c123 100755 --- a/Lib/pydoc.py +++ b/Lib/pydoc.py @@ -1458,7 +1458,8 @@ class ModuleScanner(Scanner): """An interruptible scanner that searches module synopses.""" def __init__(self): roots = map(lambda dir: (dir, ''), pathdirs()) - Scanner.__init__(self, roots, self.submodules, self.ispackage) + Scanner.__init__(self, roots, self.submodules, self.isnewpackage) + self.inodes = map(lambda (dir, pkg): os.stat(dir)[1], roots) def submodules(self, (dir, package)): children = [] @@ -1471,8 +1472,11 @@ class ModuleScanner(Scanner): children.sort() # so that spam.py comes before spam.pyc or spam.pyo return children - def ispackage(self, (dir, package)): - return ispackage(dir) + def isnewpackage(self, (dir, package)): + inode = os.stat(dir)[1] # detect circular symbolic links + if not (os.path.islink(dir) and inode in self.inodes): + self.inodes.append(inode) + return ispackage(dir) def run(self, callback, key=None, completer=None): if key: key = lower(key)