From: davek Date: Wed, 9 Jun 2010 16:46:59 +0000 (+0000) Subject: * opts-common.c (prune_options): Ensure replacement argv array X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=616c531499eabc12c1c2893c2cc4658066bef037;p=thirdparty%2Fgcc.git * opts-common.c (prune_options): Ensure replacement argv array is correctly terminated by a NULL entry. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@160496 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bc5886e8a477..b60675d1b832 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2010-06-09 Dave Korn + + * opts-common.c (prune_options): Ensure replacement argv array + is correctly terminated by a NULL entry. + 2010-06-09 Jan Hubicka * cgraph.h (varpool_first_static_initializer, diff --git a/gcc/opts-common.c b/gcc/opts-common.c index b70b823db16e..d9368d50f14a 100644 --- a/gcc/opts-common.c +++ b/gcc/opts-common.c @@ -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 {