diff --git a/sabnzbd/nzbstuff.py b/sabnzbd/nzbstuff.py index 5bed1aa..842dc86 100644 --- a/sabnzbd/nzbstuff.py +++ b/sabnzbd/nzbstuff.py @@ -2070,16 +2070,16 @@ def nzf_cmp_name(nzf1, nzf2): def create_work_name(name): - """ Remove ".nzb" and ".par(2)" and sanitize """ - strip_ext = [".nzb", ".par", ".par2"] - name = sanitize_foldername(name.strip()) + """ Remove ".nzb" and ".par(2)" and sanitize, skip URL's """ if name.find("://") < 0: - name_base, ext = os.path.splitext(name) # In case it was one of these, there might be more - while ext.lower() in strip_ext: + # Need to remove any invalid characters before starting + name_base, ext = os.path.splitext(sanitize_foldername(name)) + while ext.lower() in (".nzb", ".par", ".par2"): name = name_base name_base, ext = os.path.splitext(name) - return name.strip() + # And make sure we remove invalid characters again + return sanitize_foldername(name) else: return name.strip() diff --git a/tests/test_nzbstuff.py b/tests/test_nzbstuff.py index 6774a88..e75d2c5 100644 --- a/tests/test_nzbstuff.py +++ b/tests/test_nzbstuff.py @@ -55,7 +55,7 @@ class TestNZO: # TODO: More checks! -class TestScanPassword: +class TestNZBStuffHelpers: def test_scan_passwords(self): file_names = { "my_awesome_nzb_file{{password}}": "password", @@ -77,3 +77,20 @@ class TestScanPassword: for file_name, clean_file_name in file_names.items(): assert nzbstuff.scan_password(file_name)[0] == clean_file_name + + def test_create_work_name(self): + # Only test stuff specific for create_work_name + # The sanitizing is already tested in tests for sanitize_foldername + file_names = { + "my_awesome_nzb_file.pAr2.nZb": "my_awesome_nzb_file", + "my_awesome_nzb_file.....pAr2.nZb": "my_awesome_nzb_file", + "my_awesome_nzb_file....par2..": "my_awesome_nzb_file", + " my_awesome_nzb_file .pAr.nZb": "my_awesome_nzb_file", + "with.extension.and.period.par2.": "with.extension.and.period", + "nothing.in.here": "nothing.in.here", + " just.space ": "just.space", + "http://test.par2 ": "http://test.par2", + } + + for file_name, clean_file_name in file_names.items(): + assert nzbstuff.create_work_name(file_name) == clean_file_name