[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[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: