Message ID | 20171230204650.34af7540@newton |
---|---|
State | New |
Headers | show |
Series | expandargv: fix check for dynamic allocation of argument vector | expand |
On 12/30/2017 12:46 PM, Daniel van Gerpen wrote: > > > When the code interpolates the contents of response files, the > argument vector is reallocated to the new size. This only works > if it was dynamically allocated once before -- we do not want to > mess with the argv memory given to us by the init code. > > The code tried to detect this with a flag, but that was never > written to, leading to multiple dynamic allocations -- one > for each response file. > --- > libiberty/argv.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) THanks. I created a suitable ChangeLog entry and committed your patch to the trunk. Jeff
diff --git a/libiberty/argv.c b/libiberty/argv.c index bdd4ace4cb6..fa88e50e894 100644 --- a/libiberty/argv.c +++ b/libiberty/argv.c @@ -367,8 +367,8 @@ expandargv (int *argcp, char ***argvp) { /* The argument we are currently processing. */ int i = 0; - /* Non-zero if ***argvp has been dynamically allocated. */ - int argv_dynamic = 0; + /* To check if ***argvp has been dynamically allocated. */ + char ** const original_argv = *argvp; /* Limit the number of response files that we parse in order to prevent infinite recursion. */ unsigned int iteration_limit = 2000; @@ -449,7 +449,7 @@ expandargv (int *argcp, char ***argvp) /* Parse the string. */ file_argv = buildargv (buffer); /* If *ARGVP is not already dynamically allocated, copy it. */ - if (!argv_dynamic) + if (*argvp == original_argv) *argvp = dupargv (*argvp); /* Count the number of arguments. */ file_argc = 0;