Skip to content

Commit 1128075

Browse files
committed
Restrict access to temporary files
This commit ... 1. replaces `tempfile.mktemp()` function by `uuid.uuid1()` to create temporary files' names. The former one is marked unsafe for no reason, but may cause this code to be detected as unsafe as a result. 2. explicitly create temporary files with read/write access for owner only on unix-like filesystems.
1 parent a2a90c2 commit 1128075

File tree

1 file changed

+13
-8
lines changed

1 file changed

+13
-8
lines changed

modules/temp.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import os
33
import tempfile
44
import time
5+
import uuid
56

67
# The folder to place all temporary files into.
78
TEMP_DIR = os.environ.get('XDG_RUNTIME_DIR')
@@ -63,7 +64,11 @@ class TempFile(object):
6364

6465
def __init__(self, mode='r'):
6566
"""Initialize TempFile object."""
66-
self.name = tempfile.mktemp(dir=TEMP_DIR)
67+
self.name = None
68+
while self.name is None:
69+
candidate = os.path.join(TEMP_DIR, str(uuid.uuid1()))
70+
if not os.path.exists(candidate):
71+
self.name = candidate
6772
self._file = None
6873
self._mode = mode
6974
# Cache unlink to keep it available even though the 'os' module is
@@ -90,13 +95,13 @@ def __exit__(self, exc, value, tb):
9095
def open(self):
9196
"""Open temporary file."""
9297
if self._file is None:
93-
try:
94-
# ensure cache directory exists with write permissions
95-
os.makedirs(TEMP_DIR, 0o700)
96-
except OSError as e:
97-
if e.errno != errno.EEXIST:
98-
raise
99-
self._file = open(self.name, mode=self._mode)
98+
# ensure cache directory exists with write permissions
99+
os.makedirs(TEMP_DIR, 0o700, exist_ok=True)
100+
self._file = open(
101+
file=self.name,
102+
mode=self._mode,
103+
opener=lambda file, flags: os.open(file, flags, 0o600)
104+
)
100105
return self._file
101106

102107
def close(self):

0 commit comments

Comments
 (0)