[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#16940: [PATCH] tests: Do not access /dev/tty if it does not exist
From: |
Pádraig Brady |
Subject: |
bug#16940: [PATCH] tests: Do not access /dev/tty if it does not exist |
Date: |
Wed, 05 Mar 2014 16:46:19 +0000 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130110 Thunderbird/17.0.2 |
On 03/05/2014 03:43 PM, Bernhard Voelker wrote:
> On 03/05/2014 04:21 PM, Pádraig Brady wrote:
>> Ondřej Vašík ran the rawhide build again producing:
>>
>> ./tests/misc/nohup.sh: line 66: /dev/tty: No such device or address
>> + fail=1
>>
>> So exec >/dev/tty is throwing ENXIO and exiting the subshell.
>> ENXIO is fine and corresponds to the process not having a controlling tty.
>>
>> I guessed the change here is with the newly released bash 4.3
>> which is exiting the subshell immediately in this case, and confirmed
>> the following fails:
>>
>> setsid make SHELL=~/bash-4.3/bash TESTS=tests/misc/nohup.sh SUBDIRS=.
>> check
>>
>> Now reducing the case and comparing different shells we get:
>>
>> $ setsid bash --posix -c 'echo $BASH_VERSION; (exec >/dev/tty; exit 0) ||
>> echo failed_early'
>> 4.2.45(1)-release
>> bash: /dev/tty: No such device or address
>>
>> $ setsid ./bash --posix -c 'echo $BASH_VERSION; (exec >/dev/tty; exit 0)
>> || echo failed_early'
>> 4.3.0(1)-release
>> ./bash: /dev/tty: No such device or address
>> failed_early
>>
>> $ setsid ksh -c '(exec >/dev/tty; exit 0) || echo failed_early'
>> $ ksh: /dev/tty: cannot create [No such device or address]
>> failed_early
>>
>> $ setsid dash -c '(exec >/dev/tty; exit 0) || echo failed_early'
>> dash: 1: cannot create /dev/tty: No such device or address
>> failed_early
>
> oh, that's a tricky one.
> Thanks for the in-depth analysis.
>
>> So rather than newer bash being the difference here,
>> it's the older bash that is the outlier.
>> So we should adjust the test case to handle all shells.
>> Proposed patch attached.
>
>> + # POSIX shells immediately exit the subshell on exec error.
>> + # So check we can write to /dev/tty before the exec, which
>> + # isn't possible if we've no controlling tty for example.
>> + >/dev/tty || exit 0
>> +
>
> The above '>/dev/tty' would also work if /dev/tty does not exist
> and /dev is writable. Therefore - although the reason of the failure
> originates from something completely different -, I think it'd be better
> to go back to checking explicitly for a character device again:
>
> test -c /dev/tty && :>/dev/tty || exit 0
The test -c is safer. I'll add that.
Note the ':>' is problematic though as the : always returns true.
Well it does for solaris, freebsd, dash, bash-4.3 at least.
In ksh and bash<=4.2 it does return an error as you assumed.
The ':>' construct is only needed for csh anyway I think
which we don't support.
I notice a few more cases: git grep ": *>.*"
which I'll fix in a follow up patch with maybe a syntax check.
thanks,
Pádraig.
- bug#16940: [PATCH] tests: Do not access /dev/tty if it does not exist, Cyril Roelandt, 2014/03/04
- bug#16940: [PATCH] tests: Do not access /dev/tty if it does not exist, Pádraig Brady, 2014/03/04
- bug#16940: [PATCH] tests: Do not access /dev/tty if it does not exist, Bernhard Voelker, 2014/03/05
- bug#16940: [PATCH] tests: Do not access /dev/tty if it does not exist, Pádraig Brady, 2014/03/05
- bug#16940: [PATCH] tests: Do not access /dev/tty if it does not exist, Bernhard Voelker, 2014/03/05
- bug#16940: [PATCH] tests: Do not access /dev/tty if it does not exist,
Pádraig Brady <=
- bug#16940: [PATCH] tests: Do not access /dev/tty if it does not exist, Pádraig Brady, 2014/03/05
- bug#16940: [PATCH] tests: Do not access /dev/tty if it does not exist, Bernhard Voelker, 2014/03/05