Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.7k
Closed
Description
Bug report
Bug description:
Two closely-related issues inpathlib.Path.resolve():
First,resolve(strict=True) raisesRuntimeError rather thanOSError when a symlink loop is encountered. This is done only for backwards compatibility, since#25264 made pathlib callos.path.realpath(). It should raiseOSError(ELOOP)
Second,resolve(strict=False) suppresses every kind of OS errorexcept symlink loop errors. Again this is only for backwards compatibility. It should suppress exceptions about symlink loops.
Relevant code:
Lines 1233 to 1252 ine21c89f
| defcheck_eloop(e): | |
| winerror=getattr(e,'winerror',0) | |
| ife.errno==ELOOPorwinerror==_WINERROR_CANT_RESOLVE_FILENAME: | |
| raiseRuntimeError("Symlink loop from %r"%e.filename) | |
| try: | |
| s=os.path.realpath(self,strict=strict) | |
| exceptOSErrorase: | |
| check_eloop(e) | |
| raise | |
| p=self.with_segments(s) | |
| # In non-strict mode, realpath() doesn't raise on symlink loops. | |
| # Ensure we get an exception by calling stat() | |
| ifnotstrict: | |
| try: | |
| p.stat() | |
| exceptOSErrorase: | |
| check_eloop(e) | |
| returnp |
CPython versions tested on:
3.11, 3.12, CPython main branch
Operating systems tested on:
No response