Hi again,

Another bug: the exit status is not preserved.

Consider

  busybox ash -c 'trap "echo ERR" ERR; false; echo $?'

This prints ERR, and then 0, because the echo command completed successfully. It is supposed to print ERR, and then 1, because like EXIT actions, ERR actions are supposed to preserve the exit status of the last command before the action was invoked.

I am also somewhat concerned that there may be cases where the global variables "doingtrap" and "recursive" are set, but evalstring() exits via raise_exception() and they are never cleared, preventing future ERR handlers from running. I do not currently have a test case where it matters, but am not convinced there are no test cases where it matters.

On 21/08/2021 15:36, Roberto A. Foglietta wrote:
Il giorno sab 21 ago 2021 alle ore 14:38 Harald van Dijk <[email protected] <mailto:[email protected]>> ha scritto:

    Hi,

    In bash, the ERR trap is documented as triggering in under the exact
    same conditions that 'set -e' would cause the shell to abort. This is
    not what you have implemented, you have implemented it as triggering
    whenever a simple command returns non-zero. Consider:

        trap "echo ERR" ERR
        (:) >/access-denied

    With bash, this prints:

        bash: line 2: /access-denied: Permission denied
        ERR

    With your patches, this prints:

        ash: can't create /access-denied: Permission denied

    That is, the ERR action is not executed when it should be. The command
    that failed here is not a simple command.

    Consider:

        trap "echo ERR" ERR
        false || true

    With bash, this prints nothing. With your patches, this prints ERR.
    That
    is, the ERR action is executed when it should not be. The command that
    failed here is one that had its exit status tested.


 The 10th patch reworks the trap ERR in such a way which is compliant with bash for both these cases.

  Thank you,
--
Roberto A. Foglietta
+39.349.33.30.697
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to