Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 30 Jul 2017 22:08:56 +0000
From:      bugzilla-noreply@freebsd.org
To:        freebsd-standards@FreeBSD.org
Subject:   [Bug 220587] /bin/sh Incorrect options handling
Message-ID:  <bug-220587-15-cP83i1EuiM@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-220587-15@https.bugs.freebsd.org/bugzilla/>
References:  <bug-220587-15@https.bugs.freebsd.org/bugzilla/>

next in thread | previous in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D220587

--- Comment #5 from Jilles Tjoelker <jilles@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 sh=
ould
be named "invocation" instead of "options", since tests for a few set optio=
ns
are under "execution" already.

Also, I would like this split up in two patches, one that adds some testcas=
es
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 give=
n.
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 possibl=
e.
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.)

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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-220587-15-cP83i1EuiM>