Skip to content

Commit ace2952

Browse files
committed
tempfile:
Raise a ``ValueError`` if the ``prefix`` or ``suffix`` contains a directory component. gh-79459
1 parent 1643525 commit ace2952

2 files changed

Lines changed: 30 additions & 0 deletions

File tree

‎Lib/tempfile.py‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,11 +119,15 @@ def _sanitize_params(prefix, suffix, dir):
119119
output_type = _infer_return_type(prefix, suffix, dir)
120120
if suffix is None:
121121
suffix = output_type()
122+
if _os.path.dirname(suffix):
123+
raise ValueError("'prefix' or 'suffix' can't contain a directory component")
122124
if prefix is None:
123125
if output_type is str:
124126
prefix = template
125127
else:
126128
prefix = _os.fsencode(template)
129+
if _os.path.dirname(prefix):
130+
raise ValueError("'prefix' or 'suffix' can't contain a directory component")
127131
if dir is None:
128132
if output_type is str:
129133
dir = gettempdir()

‎Lib/test/test_tempfile.py‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2154,5 +2154,31 @@ def test_cleanup_safe(self):
21542154
# platforms, but don't forget to update the docs.
21552155
self.assertTrue(tempfile._rmtree_use_dir_fd)
21562156

2157+
2158+
class TestPrefixAndSuffix(BaseTestCase):
2159+
def test_value_error_if_prefix_or_suffix_contains_directory(self):
2160+
MESSAGE = "'prefix' or 'suffix' can't contain a directory component"
2161+
2162+
if os.altsep is None:
2163+
data = (
2164+
((os.sep), None),
2165+
(os.fsencode(os.sep), tempfile.gettempdirb()),
2166+
)
2167+
else:
2168+
data = (
2169+
((os.altsep), None),
2170+
(os.fsencode(os.altsep), tempfile.gettempdirb()),
2171+
)
2172+
2173+
for value, directory in data:
2174+
with self.subTest((value, directory)):
2175+
with self.assertRaisesRegex(ValueError, MESSAGE):
2176+
tempfile.mkstemp(dir=directory, prefix=value)
2177+
with self.assertRaisesRegex(ValueError, MESSAGE):
2178+
os.rmdir(tempfile.mkdtemp(dir=directory, prefix=value))
2179+
with self.assertRaisesRegex(ValueError, MESSAGE):
2180+
tempfile.NamedTemporaryFile(dir=directory, prefix=value, delete=True)
2181+
2182+
21572183
if __name__ == "__main__":
21582184
unittest.main()

0 commit comments

Comments
 (0)