Skip to content

Commit 68cf671

Browse files
authored
Merge pull request #621 from DimitriPapadopoulos/master
Better handle pathological filenames
2 parents 586c0e0 + fc6a9c0 commit 68cf671

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

nibabel/filename_parser.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -264,9 +264,14 @@ def splitext_addext(filename,
264264
for ext in addexts:
265265
if endswith(filename, ext):
266266
extpos = -len(ext)
267-
addext = filename[extpos:]
268-
filename = filename[:extpos]
267+
filename, addext = filename[:extpos], filename[extpos:]
269268
break
270269
else:
271270
addext = ''
272-
return os.path.splitext(filename) + (addext,)
271+
# os.path.splitext() behaves unexpectedly when filename starts with '.'
272+
extpos = filename.rfind('.')
273+
if extpos < 0 or filename.strip('.') == '':
274+
root, ext = filename, ''
275+
else:
276+
root, ext = filename[:extpos], filename[extpos:]
277+
return (root, ext, addext)

nibabel/tests/test_filename_parser.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,3 +159,14 @@ def test_splitext_addext():
159159
# case sensitive
160160
res = splitext_addext('fname.ext.FOO', ('.foo', '.bar'), True)
161161
assert_equal(res, ('fname.ext', '.FOO', ''))
162+
# edge cases
163+
res = splitext_addext('.nii')
164+
assert_equal(res, ('', '.nii', ''))
165+
res = splitext_addext('...nii')
166+
assert_equal(res, ('..', '.nii', ''))
167+
res = splitext_addext('.')
168+
assert_equal(res, ('.', '', ''))
169+
res = splitext_addext('..')
170+
assert_equal(res, ('..', '', ''))
171+
res = splitext_addext('...')
172+
assert_equal(res, ('...', '', ''))

0 commit comments

Comments
 (0)