Commit 9d486621 authored by Michal Berger's avatar Michal Berger Committed by Jim Harris
Browse files

check_format: Ignore shellcheck's SC2128 and SC2178 directives



These are currently prone to false-positives especially in terms of
scoping. Consider the following:

foo() {
	local bar=(42)
	echo "${bar[*]}"
}

bar=43
foo
echo "$bar"

Some versions of shellcheck, including the latest, 0.7.2, complain
about $bar being reused as a plain string here. This is incorrect
since foo() holds its own copy of bar[@] hence the assignment which
takes place outside of it doesn't affect its content.

SC2178 can be mitigated be reversing the order of declaration:

bar=43
foo() { ... }
...

but the SC2128 still remains.

Currently, in our code majority of these warnings are coming from
false-positives due to initial source'ing which most of our test
scripts do (e.g. they fetch a function where local bar=() is used
and in the test itself $bar happens to be assigned a plain string.
This is still valid code).

To mitigate, disable these directives untill shellcheck is capable
of properly interpreting scoping when checking them.

Signed-off-by: default avatarMichal Berger <michalx.berger@intel.com>
Change-Id: Ifbde973eae6e261d79e1c340eb28644bce5f4e45
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/8503


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarKarol Latecki <karol.latecki@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent 63fd9432
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -480,17 +480,19 @@ function check_bash_static_analysis() {
		# SC2086: Double quote to prevent globbing and word splitting.
		# SC2119: Use foo "$@" if function's $1 should mean script's $1.
		# SC2120: foo references arguments, but none are ever passed.
		# SC2128: Expanding an array without an index only gives the first element.
		# SC2148: Add shebang to the top of your script.
		# SC2153: Possible Misspelling: MYVARIABLE may not be assigned, but MY_VARIABLE is.
		# SC2154: var is referenced but not assigned.
		# SC2164: Use cd ... || exit in case cd fails.
		# SC2174: When used with -p, -m only applies to the deepest directory.
		# SC2178: Variable was used as an array but is now assigned a string.
		# SC2206: Quote to prevent word splitting/globbing,
		#         or split robustly with mapfile or read -a.
		# SC2207: Prefer mapfile or read -a to split command output (or quote to avoid splitting).
		# SC2223: This default assignment may cause DoS due to globbing. Quote it.
		SHCK_EXCLUDE="$SHCK_EXCLUDE,SC1083,SC1090,SC1091,SC2010,SC2015,SC2016,SC2034,SC2046,SC2086,\
SC2119,SC2120,SC2148,SC2153,SC2154,SC2164,SC2174,SC2001,SC2206,SC2207,SC2223"
SC2119,SC2120,SC2128,SC2148,SC2153,SC2154,SC2164,SC2174,SC2178,SC2001,SC2206,SC2207,SC2223"

		SHCK_FORMAT="tty"
		SHCK_APPLY=false
+1 −2
Original line number Diff line number Diff line
@@ -5,10 +5,9 @@ rootdir=$(readlink -f $testdir/../..)
source $rootdir/test/common/autotest_common.sh

rpc_py="$rootdir/scripts/rpc.py"
SPDK_APP="$SPDK_BIN_DIR/spdk_tgt"
MEM_SCRIPT="$rootdir/scripts/dpdk_mem_info.py"

$SPDK_APP &
"${SPDK_APP[@]}" &
spdkpid=$!

waitforlisten $spdkpid