fix OSError 36 caused by checking for path that is too long to exist

This commit is contained in:
Nick Sweeting 2024-05-07 04:12:07 -07:00
parent ce42472732
commit f770bba3cf
No known key found for this signature in database

View file

@ -174,6 +174,7 @@ def wget_output_path(link: Link) -> Optional[str]:
full_path = without_fragment(without_query(path(link.url))).strip('/')
search_dir = Path(link.link_dir) / domain(link.url).replace(":", "+") / urldecode(full_path)
for _ in range(4):
try:
if search_dir.exists():
if search_dir.is_dir():
html_files = [
@ -191,6 +192,11 @@ def wget_output_path(link: Link) -> Optional[str]:
for file_present in search_dir.iterdir():
if file_present == last_part_of_url:
return str((search_dir / file_present).relative_to(link.link_dir))
except OSError:
# OSError 36 and others can happen here, caused by trying to check for impossible paths
# (paths derived from URLs can often contain illegal unicode characters or be too long,
# causing the OS / filesystem to reject trying to open them with a system-level error)
pass
# Move up one directory level
search_dir = search_dir.parent