osproc: fixes a memory leak affecting Windows

This commit is contained in:
Araq 2017-09-30 15:36:13 +02:00
commit 4b350d2632

View file

@ -410,13 +410,11 @@ when defined(Windows) and not defined(useNimRtl):
result.readDataImpl = hsReadData result.readDataImpl = hsReadData
result.writeDataImpl = hsWriteData result.writeDataImpl = hsWriteData
proc buildCommandLine(a: string, args: openArray[string]): cstring = proc buildCommandLine(a: string, args: openArray[string]): string =
var res = quoteShell(a) result = quoteShell(a)
for i in 0..high(args): for i in 0..high(args):
res.add(' ') result.add(' ')
res.add(quoteShell(args[i])) result.add(quoteShell(args[i]))
result = cast[cstring](alloc0(res.len+1))
copyMem(result, cstring(res), res.len)
proc buildEnv(env: StringTableRef): tuple[str: cstring, len: int] = proc buildEnv(env: StringTableRef): tuple[str: cstring, len: int] =
var L = 0 var L = 0
@ -540,11 +538,13 @@ when defined(Windows) and not defined(useNimRtl):
result.errHandle = FileHandle(si.hStdError) result.errHandle = FileHandle(si.hStdError)
var cmdl: cstring var cmdl: cstring
var cmdRoot: string
if poEvalCommand in options: if poEvalCommand in options:
cmdl = command cmdl = command
assert args.len == 0 assert args.len == 0
else: else:
cmdl = buildCommandLine(command, args) cmdRoot = buildCommandLine(command, args)
cmdl = cstring(cmdRoot)
var wd: cstring = nil var wd: cstring = nil
var e = (str: nil.cstring, len: -1) var e = (str: nil.cstring, len: -1)
if len(workingDir) > 0: wd = workingDir if len(workingDir) > 0: wd = workingDir