Skip to content
This repository was archived by the owner on Apr 4, 2023. It is now read-only.

Commit 1cafbbe

Browse files
committed
Remove race in directory creation (in Nim 0.15.3+)
1 parent a83556b commit 1cafbbe

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

tempfile.nim

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,20 @@ proc mkdtemp*(prefix = "tmp", suffix = "", dir = ""): string =
5959
for x in 0..MAX_RETRIES:
6060
path = mktemp(prefix, suffix, dir)
6161
try:
62-
# A bit racy, but better than nothing
63-
if not path.existsDir:
64-
createDir(path)
65-
# In Nim 0.15.2 and older `createDir` didn't fail if `path`
66-
# did already exist, but was not a directory.
67-
if path.existsDir:
62+
when declared(existsOrCreateDir):
63+
# Nim 0.15.3 or later
64+
createDir(path.parentDir)
65+
if not existsOrCreateDir(path):
6866
return path
67+
else:
68+
# Nim 0.15.2 or older (for compatibility)
69+
# A bit racy, but better than nothing
70+
if not path.existsDir:
71+
createDir(path)
72+
# Before 0.15.3 `createDir` didn't fail if `path` did
73+
# already exist, but was not a directory.
74+
if path.existsDir:
75+
return path
6976
except:
7077
discard
7178
raise newException(IOError, "Unable to create temporary directory")

0 commit comments

Comments
 (0)