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:
parent
89b08d11a7
commit
d52b1cf43e
@ -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;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user