Skip to content

Commit

Permalink
fix #17898(randomPathName called twice in a row can return the same s…
Browse files Browse the repository at this point in the history
…tring on windows) (#18729)

* close #17898

* no need to consider js
  • Loading branch information
ringabout authored Aug 22, 2021
1 parent 061a918 commit cc08d5c
Showing 1 changed file with 17 additions and 3 deletions.
20 changes: 17 additions & 3 deletions lib/std/tempfiles.nim
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ See also:
* `mkstemp` (posix), refs https://man7.org/linux/man-pages/man3/mkstemp.3.html
]#

import os, random
import os, random, std/monotimes


const
Expand Down Expand Up @@ -96,11 +96,25 @@ proc safeOpen(filename: string): File =
discard posix.close(fileHandle) # TODO handles failure when closing file
raiseOSError(osLastError(), filename)


type
NimTempPathState = object
state: Rand
isInit: bool

var nimTempPathState {.threadvar.}: NimTempPathState

template randomPathName(length: Natural): string =
var res = newString(length)
var state = initRand()
if not nimTempPathState.isInit:
var time = getMonoTime().ticks
when compileOption("threads"):
time = time xor int64(getThreadId())
nimTempPathState.isInit = true
nimTempPathState.state = initRand(time)

for i in 0 ..< length:
res[i] = state.sample(letters)
res[i] = nimTempPathState.state.sample(letters)
res

proc getTempDirImpl(dir: string): string {.inline.} =
Expand Down

0 comments on commit cc08d5c

Please sign in to comment.