提交 05517c62 编写于 作者: D Derek Parker

Properly terminate C string array for execve on OSX

上级 5a35e8e6
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
extern char** environ; extern char** environ;
int int
fork_exec(char *argv0, char **argv, fork_exec(char *argv0, char **argv, int size,
mach_port_name_t *task, mach_port_name_t *task,
mach_port_t *port_set, mach_port_t *port_set,
mach_port_t *exception_port, mach_port_t *exception_port,
...@@ -12,6 +12,8 @@ fork_exec(char *argv0, char **argv, ...@@ -12,6 +12,8 @@ fork_exec(char *argv0, char **argv,
int fd[2]; int fd[2];
if (pipe(fd) < 0) return -1; if (pipe(fd) < 0) return -1;
argv[size-1] = '\0';
kern_return_t kret; kern_return_t kret;
pid_t pid = fork(); pid_t pid = fork();
if (pid > 0) { if (pid > 0) {
......
...@@ -6,4 +6,4 @@ ...@@ -6,4 +6,4 @@
#include <stdlib.h> #include <stdlib.h>
int int
fork_exec(char *argv0, char **argv, mach_port_name_t*, mach_port_t*, mach_port_t*, mach_port_t*); fork_exec(char *, char **, int, mach_port_name_t*, mach_port_t*, mach_port_t*, mach_port_t*);
...@@ -51,18 +51,15 @@ func Launch(cmd []string) (*Process, error) { ...@@ -51,18 +51,15 @@ func Launch(cmd []string) (*Process, error) {
argv0 := C.CString(argv0Go) argv0 := C.CString(argv0Go)
argvSlice := make([]*C.char, 0, len(cmd)) argvSlice := make([]*C.char, 0, len(cmd)+1)
for _, arg := range cmd { for _, arg := range cmd {
argvSlice = append(argvSlice, C.CString(arg)) argvSlice = append(argvSlice, C.CString(arg))
} }
var argv **C.char
argv = &argvSlice[0]
dbp := New(0) dbp := New(0)
var pid int var pid int
dbp.execPtraceFunc(func() { dbp.execPtraceFunc(func() {
ret := C.fork_exec(argv0, argv, &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) pid = int(ret)
}) })
if pid <= 0 { if pid <= 0 {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册