]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
man: reset OPTIND before parsing args
authorKyle Evans <kevans@FreeBSD.org>
Wed, 22 Sep 2021 19:58:19 +0000 (14:58 -0500)
committerKyle Evans <kevans@FreeBSD.org>
Sun, 3 Oct 2021 05:19:56 +0000 (00:19 -0500)
commit00d0f1811b719c66ee91b9bf4680cfc0515e65aa
tree16e0c480e12df4bfd0d4a33297016fb876461242
parentca052baa603aa5743c616d89c2fb2dfdb6fcd4ea
man: reset OPTIND before parsing args

From jilles: POSIX requires that a script set `OPTIND=1` before using
different sets of parameters with `getopts`, or the results will be
unspecified.

The specific problem observed here is that we would execute `man -f` or
`man -k` without cleaning up state from man_parse_args()' `getopts`
loop.  FreeBSD's /bin/sh seems to reset OPTIND to 1 after we hit the
second getopts loop, rendering the following shift harmless; other
/bin/sh implementations will leave it at what we came into the loop at
(e.g., bash as /bin/sh), shifting off any keywords that we had.

Input from: jilles
Reviewed by: allanjude, bapt, imp
Sponsored by: Klara, Inc.

(cherry picked from commit f555b39e6bb7cbfbe1905e90f64c4dfc4456fabb)
usr.bin/man/man.sh