[Bug 220587] /bin/sh Incorrect options handling

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Sun Jul 30 22:08:56 UTC 2017


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=220587

--- Comment #5 from Jilles Tjoelker <jilles at FreeBSD.org> ---
I think this is the right direction but I do have some things that need to be
changed.

So that installworld does not fail, the new directory should be added to the
appropriate file in etc/mtree/ (BSD.tests.dist in this case). Perhaps it should
be named "invocation" instead of "options", since tests for a few set options
are under "execution" already.

Also, I would like this split up in two patches, one that adds some testcases
that already work (and will not be broken by the change) and one that fixes the
bug and adds testcases that fail with the previous version.

The variable saw_minus_c would be more consistently named cflag. I suppose it
is OK to start using <stdbool.h> at this point.

A -c without a command_string operand (as in "sh -c" or "sh -c -s") should not
be ignored, since this causes commands to be read from unexpected sources.
(This is one situation for a testcase that already passes.)

The current code also rejects -cc, even if a command_string operand is given.
Accepting this, as your patch does, seems consistent with other shells.

The -f option is better suited than the -m option as a "dummy" option since -m
may cause the shell to stop itself in certain situations. The -a option is also
suitable.

I like to be able to run testcases with various other shells, where possible.
To help with this, avoid echoing things starting with '-' or containing '\' and
do not assume that $- contains only the expected characters in the order sh
currently happens to put them. For example,

${SH} -f -c -a 'echo $-:$0:$@' -foo -bar | grep -qx "fa:-foo:-bar"

could be fixed as

case `${SH} -f -c -a 'echo $-:$-:$0:$@' -foo -bar` in
*f*:*a*:-foo:-bar) : ;;
*) echo bad ;;
esac

(I have not used $() here since shells/heirloom-sh may pass a few related
tests, even though it will not pass this one.)

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the freebsd-standards mailing list