From 776e2a593fec689d9912371a5b893f64aebcd6c5 Mon Sep 17 00:00:00 2001 From: Derek Parker Date: Tue, 7 Jul 2015 14:57:36 -0500 Subject: [PATCH] Null terminate argv array in Go land not C land --- proc/exec_darwin.c | 2 -- proc/proc_darwin.go | 7 +++++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/proc/exec_darwin.c b/proc/exec_darwin.c index 92df1315..9466ff20 100644 --- a/proc/exec_darwin.c +++ b/proc/exec_darwin.c @@ -12,8 +12,6 @@ fork_exec(char *argv0, char **argv, int size, int fd[2]; if (pipe(fd) < 0) return -1; - argv[size-1] = '\0'; - kern_return_t kret; pid_t pid = fork(); if (pid > 0) { diff --git a/proc/proc_darwin.go b/proc/proc_darwin.go index 83aec33c..1863fff5 100644 --- a/proc/proc_darwin.go +++ b/proc/proc_darwin.go @@ -50,16 +50,19 @@ func Launch(cmd []string) (*Process, error) { } argv0 := C.CString(argv0Go) - argvSlice := make([]*C.char, 0, len(cmd)+1) for _, arg := range cmd { argvSlice = append(argvSlice, C.CString(arg)) } + // argv array must be null terminated. + argvSlice = append(argvSlice, nil) dbp := New(0) var pid int dbp.execPtraceFunc(func() { - ret := C.fork_exec(argv0, &argvSlice[0], C.int(len(argvSlice)), &dbp.os.task, &dbp.os.portSet, &dbp.os.exceptionPort, &dbp.os.notificationPort) + ret := C.fork_exec(argv0, &argvSlice[0], C.int(len(argvSlice)), + &dbp.os.task, &dbp.os.portSet, &dbp.os.exceptionPort, + &dbp.os.notificationPort) pid = int(ret) }) if pid <= 0 {