libcc1: fix a memory leak
authorTom Tromey <tom@tromey.com>
Tue, 4 May 2021 21:26:58 +0000 (15:26 -0600)
committerTom Tromey <tom@tromey.com>
Wed, 5 May 2021 06:06:18 +0000 (00:06 -0600)
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.

libcc1/gdbctx.hh

index 4a48381..4d24883 100644 (file)
@@ -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