Skip to content

Commit b7b80c6

Browse files
jeffhostetlerderrickstolee
authored andcommitted
sub-process: do not borrow cmd pointer from caller
Teach subprocess_start() to use a copy of the passed `cmd` string rather than borrowing the buffer from the caller. Some callers of subprocess_start() pass the value returned from find_hook() which points to a static buffer and therefore is only good until the next call to find_hook(). This could cause problems for the long-running background processes managed by sub-process.c where later calls to subprocess_find_entry() to get an existing process will fail. This could cause more than 1 long-running process to be created. TODO Need to confirm, but if only read_object_hook() uses TODO subprocess_start() in this manner, we could drop this TODO commit when we drop support for read_object_hook(). Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
1 parent c5c3ff5 commit b7b80c6

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

sub-process.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,12 @@ int subprocess_start(struct hashmap *hashmap, struct subprocess_entry *entry, co
8080
int err;
8181
struct child_process *process;
8282

83-
entry->cmd = cmd;
83+
// BUGBUG most callers to subprocess_start() pass in "cmd" the value
84+
// BUGBUG of find_hook() which returns a static buffer (that's only
85+
// BUGBUG good until the next call to find_hook()).
86+
// BUGFIX Defer assignment until we copy the string in our argv.
87+
// entry->cmd = cmd;
88+
8489
process = &entry->process;
8590

8691
child_process_init(process);
@@ -92,6 +97,8 @@ int subprocess_start(struct hashmap *hashmap, struct subprocess_entry *entry, co
9297
process->clean_on_exit_handler = subprocess_exit_handler;
9398
process->trace2_child_class = "subprocess";
9499

100+
entry->cmd = process->args.v[0];
101+
95102
err = start_command(process);
96103
if (err) {
97104
error("cannot fork to run subprocess '%s'", cmd);

0 commit comments

Comments
 (0)