[SCM] Debian package checker branch, master, updated. 2.2.12-28-gbd5fec2
The following commit has been merged in the master branch:
commit bd5fec232c02cdc0897685d46c9a6f99943d055b
Author: Russ Allbery <rra@debian.org>
Date: Sat Jul 4 21:07:44 2009 -0700
Avoid a false positive in the bashism check for trap
* checks/scripts{,.desc}:
+ [RA] Avoid a false positive in the bashism check for trap with
signal numbers when the the trap command contains a number. Thanks,
Julien Cristau. (Closes: #534580)
Also create a new scripts-bashisms check in the new test suite that
includes all the bashism checks from the old maintainer-scripts check.
diff --git a/checks/scripts b/checks/scripts
index 2cc2e70..1da05ad 100644
--- a/checks/scripts
+++ b/checks/scripts
@@ -234,7 +234,8 @@ our @bashism_regexs = (
$LEADIN . qr'read\s*(?:-\w+\s*)*(?:\".*?\"|[\'].*?[\'])?\s*(?:;|$)',
# read without variable
$LEADIN . qr'kill\s+-[^sl]\w*',# kill -[0-9] or -[A-Z]
- $LEADIN . qr'trap\s+["\']?.*["\']?\s+.*[1-9]', # trap with signal numbers
+ $LEADIN . qr'trap\s+(?:\'(?:[^\'\\]|\\.)*\'\s+|\"(?:[^\"\\]|\\.)*\"\s+)?[^\"\']*[1-9]',
+ # trap with signal numbers
qr'\&>', # cshism
qr'(<\&|>\&)\s*((-|\d+)[^\s;|)`&\\\\]|[^-\d\s]+)', # should be >word 2>&1
qr'\[\[(?!:)', # alternative test command
diff --git a/debian/changelog b/debian/changelog
index 9f2c0aa..2bda222 100755
--- a/debian/changelog
+++ b/debian/changelog
@@ -46,6 +46,9 @@ lintian (2.2.13) UNRELEASED; urgency=low
+ [ADB] Detect the use of the "source" bashism when the sourced filename
contains a tilde or consists of a single character. Thanks, Raphael
Geissert and Ryan Niebur.
+ + [RA] Avoid a false positive in the bashism check for trap with
+ signal numbers when the the trap command contains a number. Thanks,
+ Julien Cristau. (Closes: #534580)
* collection/strings:
+ [ADB] Handle the fact that, when Lintian is run as root, the output of
diff --git a/t/tests/scripts-bashisms/debian/debian/postinst b/t/tests/scripts-bashisms/debian/debian/postinst
new file mode 100644
index 0000000..b49ed8a
--- /dev/null
+++ b/t/tests/scripts-bashisms/debian/debian/postinst
@@ -0,0 +1,87 @@
+#! /bin/sh -e
+
+# valid
+. /usr/share/lintian/shell || exit 0
+. /usr/share/lintian/shell >/dev/null
+. /usr/share/lintian/shell 2>/dev/null
+. /usr/share/lintian/shell </dev/null
+. "$(dirname $0)/shell" ; bar
+# invalid
+. /usr/share/lintian/shell foo
+. "$(dirname $0)/shell" bar
+
+print "Hit enter to continue"
+read
+
+H[0]='this is a string'
+echo ${H[0]}
+echo "Index 0's length is ${#H[0]}"
+echo "All of the array is: ${H[@]}"
+
+# This too is a heredoc.
+some-program > /etc/config-file <<'EOF'
+echo "All of the array is: ${H[@]}"
+EOF
+
+# But this isn't.
+cat '<<EOF'
+echo "All of the array is: ${H[@]}"
+EOF
+
+# This is a heredoc
+cat <<-EOF
+echo "All of the arry is ${H[@]}"
+EOF
+
+# As is this
+cat <<';'
+echo "All of the array is ${H[@]}"
+;
+
+# and this
+cat <<foo
+echo "All of the array is ${H[@]}"
+foobar
+echo $HOSTNAME
+foo
+
+# and again
+cat <<\bar
+echo "All of the array is ${H[@]}"
+bar
+
+# yet another
+cat <<"x++"
+echo "All of the array is ${H[@]}"
+x++
+
+# Recognize single quotes even if they start at the beginning of a line.
+echo not a bashism \
+'/{ptex,tex}/{amstex,plain,generic,}'
+
+# More bashisms.
+echo -e 'foo\n'
+echo "${!foo}"
+cat $(\< file)
+select foo in a b ; do echo $foo ; done
+cnt=$((cnt + 1))
+if false ; then
+ exec -l /bin/sh
+ exec -c /bin/sh
+ exec -a foo /bin/sh
+fi
+let cnt++
+if test -a /etc/default ; then
+ echo "$RANDOM|stuff"
+fi
+
+# Some comment checking
+# This should flag $RANDOM
+test $# -gt 2 && echo $RANDOM
+# But these shouldn't
+test 1=1 # echo $RANDOM
+(test 1=1)# echo $RANDOM
+test 1=1;# echo $RANDOM
+backgroundtask &#echo $RA
+
+#DEBHELPER#
diff --git a/testset/maintainer-scripts/debian/prerm b/t/tests/scripts-bashisms/debian/debian/prerm
similarity index 81%
copy from testset/maintainer-scripts/debian/prerm
copy to t/tests/scripts-bashisms/debian/debian/prerm
index 076ecaf..84098f7 100644
--- a/testset/maintainer-scripts/debian/prerm
+++ b/t/tests/scripts-bashisms/debian/debian/prerm
@@ -1,13 +1,6 @@
#!/bin/sh
-if [ "$1" != "upgrade" ]; then
- update-alternatives --remove dummy /usr/bin/dummy-alternative
-fi
-
-if ([ "$1" = "upgrade" ] || [ "$1" = "remove" ]) && [ -L /usr/doc/maintainer-scripts ]; the
-n
- rm -f /usr/doc/maintainer-scripts
-fi
+set -e
cat <<EOF
This is all really bad bash specific code!!!
@@ -39,8 +32,6 @@ if test -n $(echo foo | perl -pe 's/[[:space:]]//go'); then
echo 1
fi
-update-rc.d foo remove
-
# More false positives for bashism checks. None of these are errors.
echo "$line" | grep -q '{fonts/map,}/{\$progname,pdftex,dvips,}//'
echo "$line" | grep -q "${fonts},${foo}"
@@ -51,12 +42,6 @@ perl -e "print q( kill -HUP $? )"
# Still catch disallowed expansions in double-quotes, though.
echo "${line:3:1}"
-# The wrong way to run an init script (no invoke-rc.d).
-/etc/init.d/package stop
-
-# This is the only install-sgmlcatalog call that's allowed.
-install-sgmlcatalog --quiet --remove package
-
# More bashisms checks
read -x foo
@@ -168,7 +153,7 @@ foobar()
# This is a function with a bad name
)
-foobar@()
+foobar@() # foo
{
# As is this
}
@@ -180,9 +165,22 @@ read -r
read -p "Would you like to restart the service?" foo bar
read --fish
-set -e
-
source "$BAR"
source '$BAR'
source ~/bar
source a
+
+# An example from the X maintainer scripts that used to trigger the trap
+# bashism check.
+trap "message;\
+ message \"Received signal. Aborting $THIS_PACKAGE package $THIS_SCRIPT script.\";\
+ message;\
+ exit 1" HUP INT QUIT TERM
+
+# Also allow for extended single quotes containing double quotes.
+trap 'message;
+ message "Received signal. Aborting $THIS_PACKAGE package $THIS_SCRIPT script.";
+ message;
+ exit 1' HUP INT QUIT TERM
+
+#DEBHELPER#
diff --git a/t/tests/scripts-bashisms/desc b/t/tests/scripts-bashisms/desc
new file mode 100644
index 0000000..9bcfe06
--- /dev/null
+++ b/t/tests/scripts-bashisms/desc
@@ -0,0 +1,5 @@
+Testname: scripts-bashisms
+Sequence: 6000
+Version: 1.0
+Description: Check bashism detection
+Test-For: possible-bashism-in-maintainer-script
diff --git a/t/tests/scripts-bashisms/tags b/t/tests/scripts-bashisms/tags
new file mode 100644
index 0000000..d330f0b
--- /dev/null
+++ b/t/tests/scripts-bashisms/tags
@@ -0,0 +1,102 @@
+E: scripts-bashisms: maintainer-shell-script-fails-syntax-check prerm
+E: scripts-bashisms: read-in-maintainer-script postinst:14
+E: scripts-bashisms: read-in-maintainer-script prerm:162
+E: scripts-bashisms: read-in-maintainer-script prerm:164
+E: scripts-bashisms: read-in-maintainer-script prerm:165
+E: scripts-bashisms: read-in-maintainer-script prerm:166
+E: scripts-bashisms: read-in-maintainer-script prerm:47
+E: scripts-bashisms: read-in-maintainer-script prerm:48
+E: scripts-bashisms: read-in-maintainer-script prerm:49
+E: scripts-bashisms: read-in-maintainer-script prerm:50
+E: scripts-bashisms: read-in-maintainer-script prerm:51
+W: scripts-bashisms: possible-bashism-in-maintainer-script postinst:10 '. /usr/share/lintian/shell foo'
+W: scripts-bashisms: possible-bashism-in-maintainer-script postinst:11 '. "$(dirname $0)/shell"'
+W: scripts-bashisms: possible-bashism-in-maintainer-script postinst:14 'read'
+W: scripts-bashisms: possible-bashism-in-maintainer-script postinst:16 'H[0]='
+W: scripts-bashisms: possible-bashism-in-maintainer-script postinst:17 '${H[0]}'
+W: scripts-bashisms: possible-bashism-in-maintainer-script postinst:18 '${#H[0]}'
+W: scripts-bashisms: possible-bashism-in-maintainer-script postinst:19 '${H[@]}'
+W: scripts-bashisms: possible-bashism-in-maintainer-script postinst:28 '${H[@]}'
+W: scripts-bashisms: possible-bashism-in-maintainer-script postinst:63 'echo -e'
+W: scripts-bashisms: possible-bashism-in-maintainer-script postinst:64 '${!foo}'
+W: scripts-bashisms: possible-bashism-in-maintainer-script postinst:66 'select foo'
+W: scripts-bashisms: possible-bashism-in-maintainer-script postinst:69 ' exec -l'
+W: scripts-bashisms: possible-bashism-in-maintainer-script postinst:70 ' exec -c'
+W: scripts-bashisms: possible-bashism-in-maintainer-script postinst:71 ' exec -a'
+W: scripts-bashisms: possible-bashism-in-maintainer-script postinst:73 'let '
+W: scripts-bashisms: possible-bashism-in-maintainer-script postinst:74 'test -a'
+W: scripts-bashisms: possible-bashism-in-maintainer-script postinst:75 '$RANDOM'
+W: scripts-bashisms: possible-bashism-in-maintainer-script postinst:80 '$RANDOM'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:100 ' complete '
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:101 ' compgen '
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:102 ' declare '
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:105 '.foobar() {'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:106 ' typeset '
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:107 ' disown '
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:108 ' builtin '
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:109 ' set -B'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:110 ' alias -p'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:111 ' unalias -a'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:116 'ulimit'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:117 'shopt'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:118 'type '
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:119 'time '
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:12 '[ "$2" == '
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:120 'dirs'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:121 ' <(tac a)'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:123 'pushd'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:126 'local -x'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:128 'popd'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:130 'readonly -f'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:132 '/dev/tcp'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:134 'export -x'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:138 'sh -D'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:139 'sh --foo'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:140 'sh +O'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:143 ' {a,b}'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:151 ' foo.bar()'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:156 'foobar@() '
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:16 'function foo('
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:164 'read -r'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:165 'read -p'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:166 'read --fish'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:168 'source "$BAR"'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:169 'source '$BAR''
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:170 'source ~/bar'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:171 'source a'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:19 '&>'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:22 'source $FOO'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:24 'trap "echo hi" EXIT HUP 3'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:26 '[['
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:27 ' kill -HUP'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:43 '${line:3:1}'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:47 'read -x'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:48 'read -x'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:51 'read'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:53 'echo "a\\b"'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:54 'echo 'a\nb''
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:56 '${UID'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:57 '$EUID'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:58 '$SHLVL'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:59 '$DIRSTACK'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:60 '$SECONDS'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:62 '$BASH_FOO'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:63 '$SHELLOPTS'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:64 '$PIPESTATUS'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:66 '<<<'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:69 'VAR+='
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:72 ' echo -n -e'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:73 ' echo -e'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:74 ' echo -en'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:75 ' echo -ne'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:80 'ech.os() {'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:82 '>&bar'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:83 '>& bar'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:87 ' echo "abc\nxyz"'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:88 ' echo 'xyz\rabc''
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:91 ' echo -e'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:92 ' echo -ne'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:93 ' echo -e'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:96 'foobar.() {'
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:97 ' suspend '
+W: scripts-bashisms: possible-bashism-in-maintainer-script prerm:99 ' caller '
--
Debian package checker
Reply to: