Reset the internal state used for the 'getopts' built-in when 'shift' or 'set'

are used to modify the arguments.  Not doing so caused random memory reads or
null pointer dereferences when 'getopts' was called again later (SUSv3 says
getopts produces unspecified results in this case).

PR:	48318
This commit is contained in:
stefanf 2008-03-22 14:06:01 +00:00
parent 89b08d11a7
commit d52b1cf43e

View File

@ -383,7 +383,7 @@ shiftcmd(int argc, char **argv)
}
ap2 = shellparam.p;
while ((*ap2++ = *ap1++) != NULL);
shellparam.optnext = NULL;
shellparam.reset = 1;
INTON;
return 0;
}
@ -405,6 +405,7 @@ setcmd(int argc, char **argv)
if (*argptr != NULL) {
setparam(argptr);
}
shellparam.reset = 1;
INTON;
return 0;
}
@ -414,7 +415,6 @@ void
getoptsreset(const char *value)
{
if (number(value) == 1) {
shellparam.optnext = NULL;
shellparam.reset = 1;
}
}