OSDN Git Service

* opts-common.c (prune_options): Ensure replacement argv array
authordavek <davek@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 9 Jun 2010 16:46:59 +0000 (16:46 +0000)
committerdavek <davek@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 9 Jun 2010 16:46:59 +0000 (16:46 +0000)
is correctly terminated by a NULL entry.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@160496 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/opts-common.c

index bc5886e..b60675d 100644 (file)
@@ -1,3 +1,8 @@
+2010-06-09  Dave Korn  <dave.korn.cygwin@gmail.com>
+
+       * opts-common.c (prune_options): Ensure replacement argv array
+       is correctly terminated by a NULL entry.
+
 2010-06-09  Jan Hubicka  <jh@suse.cz>
 
        * cgraph.h (varpool_first_static_initializer,
index b70b823..d9368d5 100644 (file)
@@ -132,6 +132,10 @@ prune_options (int *argcp, char ***argvp)
 {
   int argc = *argcp;
   int *options = XNEWVEC (int, argc);
+  /* We will only return this replacement argv if we remove at least
+     one argument, so it does not need to be size (argc + 1) to
+     make room for the terminating NULL because we will always have
+     freed up at least one slot when we end up using it at all.  */
   char **argv = XNEWVEC (char *, argc);
   int i, arg_count, need_prune = 0;
   const struct cl_option *option;
@@ -225,6 +229,9 @@ keep:
     {
       *argcp = arg_count;
       *argvp = argv;
+      /* Add NULL-termination.  Guaranteed not to overflow because
+        arg_count here can only be less than argc.  */
+      argv[arg_count] = 0;
     }
   else
     {