summaryrefslogtreecommitdiff
path: root/libcc1
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2021-05-04 15:26:58 -0600
committerTom Tromey <tom@tromey.com>2021-05-05 00:06:18 -0600
commitee75ca6b72e4235aa48d6fb30c5cd274f2ff6b67 (patch)
tree5c5286afef4d3b2ded613a70c4eb509ed779509c /libcc1
parenta8deb8323b98fbf4c4779de4b326de72ba22469b (diff)
libcc1: fix a memory leak
libcc1 has a memory leak when calling fork_exec -- it allocates a new vector of arguments, but then does not free it anywhere. This patch changes this code to use std::vector instead. Note that the previous code tried to avoid bad_alloc. I don't believe this is very important. For one thing, plenty of other allocations do not bother with this. libcc1 * gdbctx.hh (do_compile): Use std::vector.
Diffstat (limited to 'libcc1')
-rw-r--r--libcc1/gdbctx.hh8
1 files changed, 2 insertions, 6 deletions
diff --git a/libcc1/gdbctx.hh b/libcc1/gdbctx.hh
index 4a48381f2b4..4d2488344bc 100644
--- a/libcc1/gdbctx.hh
+++ b/libcc1/gdbctx.hh
@@ -308,15 +308,11 @@ namespace cc1_plugin
self->add_callbacks ();
- char **argv = new (std::nothrow) char *[self->args.size () + 1];
- if (argv == NULL)
- return 0;
-
+ std::vector<char *> argv (self->args.size () + 1);
for (unsigned int i = 0; i < self->args.size (); ++i)
argv[i] = const_cast<char *> (self->args[i].c_str ());
- argv[self->args.size ()] = NULL;
- return self->fork_exec (argv, fds, stderr_fds);
+ return self->fork_exec (argv.data (), fds, stderr_fds);
}
static int