Browse Source

Foldernames should always be stripped from dots and spaces at the end

pull/1849/head
Safihre 4 years ago
parent
commit
8a39e5827b
  1. 10
      sabnzbd/filesystem.py
  2. 3
      tests/test_filesystem.py

10
sabnzbd/filesystem.py

@ -245,7 +245,6 @@ def sanitize_foldername(name: str) -> str:
else:
lst.append(ch)
name = "".join(lst)
name = name.strip()
if sabnzbd.WIN32 or sabnzbd.cfg.sanitize_safe():
name = replace_win_devices(name)
@ -253,9 +252,14 @@ def sanitize_foldername(name: str) -> str:
if len(name) >= sabnzbd.cfg.max_foldername_length():
name = name[: sabnzbd.cfg.max_foldername_length()]
# And finally, make sure it doesn't end in a dot
# And finally, make sure it doesn't end in a dot or a space
# This is invalid on Windows and can cause trouble for some other tools
if name != "." and name != "..":
name = name.rstrip(".")
# This would be perfect for := operator in Python 3.8+
while len(name.strip().rstrip(".")) < len(name):
name = name.strip().rstrip(".")
# Just to be sure we don't return nothing
if not name:
name = "unknown"

3
tests/test_filesystem.py

@ -166,8 +166,10 @@ class TestFileFolderNameSanitizer:
assert filesystem.sanitize_foldername("test..aftertest") == "test..aftertest"
assert filesystem.sanitize_foldername("test.aftertest.") == "test.aftertest"
assert filesystem.sanitize_foldername("test.aftertest..") == "test.aftertest"
assert filesystem.sanitize_foldername("test. aftertest. . . .") == "test. aftertest"
assert filesystem.sanitize_foldername("/test/this.") == "+test+this"
assert filesystem.sanitize_foldername("/test./this.") == "+test.+this"
assert filesystem.sanitize_foldername("/test. /this . ") == "+test. +this"
def test_long_foldername(self):
assert len(filesystem.sanitize_foldername("test" * 100)) == DEF_FOLDER_MAX
@ -191,6 +193,7 @@ class TestFileFolderNameSanitizer:
assert filesystem.sanitize_foldername("\t\t\t") == "unknown"
assert filesystem.sanitize_foldername(" ") == "unknown"
assert filesystem.sanitize_foldername(" ") == "unknown"
assert filesystem.sanitize_foldername(" . .") == "unknown"
def test_filename_too_long(self):

Loading…
Cancel
Save