Date: Sun, 28 Aug 2011 20:08:01 GMT From: Alexander Verbod <AN47HDTEMVQLKX3.NJKM2YX7YWVLP2@gmail.com> To: freebsd-gnats-submit@FreeBSD.org Subject: ports/160263: SHELL/BASH bug: testing condition for [ -x file ] is wrong Message-ID: <201108282008.p7SK81YJ008094@red.freebsd.org> Resent-Message-ID: <201108282010.p7SKAAYU024207@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 160263 >Category: ports >Synopsis: SHELL/BASH bug: testing condition for [ -x file ] is wrong >Confidential: no >Severity: serious >Priority: high >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Sun Aug 28 20:10:10 UTC 2011 >Closed-Date: >Last-Modified: >Originator: Alexander Verbod >Release: 8.2 release >Organization: >Environment: FreeBSD dev.local 8.2-RELEASE FreeBSD 8.2-RELEASE #0: Fri Feb 18 02:24:46 UTC 2011 root@almeida.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386 Also tested under: FreeBSD devel.loc 7.4-RELEASE FreeBSD 7.4-RELEASE #0: Thu Feb 17 03:51:56 UTC 2011 root@walker.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386 >Description: Conditional expression like: if [[ -x '/path/file' ]]; then or if [ -x '/path/file' ]; then does not work as expected and report on file with permission set to 444 as executable. The same conditions test under Linux(Ubuntu)works as expected. >How-To-Repeat: Run following script: #! /usr/local/bin/bash echo '======================= <BASH_bug_test> ================================'; Test_DIR="."; Test_file="${Test_DIR}/TestFile"; /bin/echo 'Test File' >"${Test_file}"; # Set READ ONLY permissions on test file /bin/chmod 444 "${Test_file}"; if [[ -x "${Test_file}" ]]; then #---- bash's bug on FreeBSD /bin/echo "After: /bin/chmod 444 '${Test_file}' operation"; /bin/echo "BASH think that file '${Test_file}' is EXECUTABLE,"; /bin/echo 'on statement like: "if [[ -x "${Test_file}" ]]; then ...", but...'; /bin/echo "/bin/ls think differently:"; /bin/echo; /bin/ls -laoF "${Test_file}"; /bin/echo; if /bin/test ! -x "${Test_file}"; then /bin/echo '/bin/test agree with /bin/ls too that'; /bin/echo "'${Test_file}' is not executable"; /bin/echo; fi if [ -x "${Test_file}" ]; then # [ aka test is not smarter eather /bin/echo; /bin/echo "BTW, BASH's"' internal "[" aka "test"'; /bin/echo ' if [ -x "${Test_file}" ]; then ...'; /bin/echo 'is not smarter eather :('; else /bin/echo 'Construction like: "if [ -x "${Test_file}" ]; then ..." is work.'; fi else /bin/echo "File '${Test_file}' is NOT executable"; fi /bin/rm -f "${Test_file}" # Be nice, clean up own poop echo '======================= </BASH_bug_test> ==============================='; exit 0 >Fix: >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201108282008.p7SK81YJ008094>