Skip to content

Commit 2f8e249

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

2 files changed

Lines changed: 29 additions & 0 deletions

File tree

Lib/tempfile.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,11 +117,15 @@ def _sanitize_params(prefix, suffix, dir):
117117
output_type = _infer_return_type(prefix, suffix, dir)
118118
if suffix is None:
119119
suffix = output_type()
120+
if _os.path.dirname(suffix):
121+
raise ValueError("'prefix' or 'suffix' can't contain a directory component")
120122
if prefix is None:
121123
if output_type is str:
122124
prefix = template
123125
else:
124126
prefix = _os.fsencode(template)
127+
if _os.path.dirname(prefix):
128+
raise ValueError("'prefix' or 'suffix' can't contain a directory component")
125129
if dir is None:
126130
if output_type is str:
127131
dir = gettempdir()

Lib/test/test_tempfile.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2054,5 +2054,30 @@ def test_delete_false(self):
20542054
self.assertTrue(os.path.exists(working_dir))
20552055
shutil.rmtree(working_dir)
20562056

2057+
2058+
class TestPrefixAndSuffix(BaseTestCase):
2059+
def test_value_error_if_prefix_or_suffix_contains_directory(self):
2060+
MESSAGE = "'prefix' or 'suffix' can't contain a directory component"
2061+
2062+
if os.altsep is None:
2063+
data = (
2064+
((os.sep), None),
2065+
(os.fsencode(os.sep), tempfile.gettempdirb()),
2066+
)
2067+
else:
2068+
data = (
2069+
((os.altsep), None),
2070+
(os.fsencode(os.altsep), tempfile.gettempdirb()),
2071+
)
2072+
2073+
for value, directory in data:
2074+
with self.subTest((value, directory)):
2075+
with self.assertRaisesRegex(ValueError, MESSAGE):
2076+
tempfile.mkstemp(dir=directory, prefix=value)
2077+
with self.assertRaisesRegex(ValueError, MESSAGE):
2078+
os.rmdir(tempfile.mkdtemp(dir=directory, prefix=value))
2079+
with self.assertRaisesRegex(ValueError, MESSAGE):
2080+
tempfile.NamedTemporaryFile(dir=directory, prefix=value, delete=True)
2081+
20572082
if __name__ == "__main__":
20582083
unittest.main()

0 commit comments

Comments
 (0)