Message 125429 - Python tracker (original) (raw)
Thanks for the patch.
There seems to be a race remaining here:
try:
if os.path.islink(path):
# symlinks to directories are forbidden, see bug [#1669](issue1669 "[closed] shutil.rmtree fails on symlink, after deleting contents")
raise OSError("Cannot call rmtree on a symbolic link")
except OSError:
onerror(os.path.islink, path, sys.exc_info())
# can't continue even if onerror hook returns
return
fd = os.open(path, os.O_RDONLY)
Someone could change path
to be a symlink between the calls to islink() and open(). You probably need to stat the fd instead.
Some other things:
- if close() is meant to be a private helper, it should be named _close()
- instead of a bare "except" in close(), use "except EnvironmentError" or "except OSError"
I haven't looked at the tests yet.