From 30e3e21e873b01b98ab91dc1252d4112d6a9fd2a Mon Sep 17 00:00:00 2001 From: Eli Schwartz Date: Tue, 12 Jun 2018 21:17:17 -0400 Subject: libmakepkg/lint_pkgbuild: check for invalid variables even if they're empty Checking the length of the variable to be non-zero before considering it an error is inconsistent; license=() and depends='' and `declare arch` should be considered just as wrong. In fact the current check detects depends='' as non-zero and returns an error, but happily considers the others to be perfectly okay. A more reliable check is to simply see if the name has been declared (whether it is set or not), and then enforce that it's been declared to the right type. As an added benefit, avoiding the creation of proxy-evaled variables to count the number of indexes results in simpler code. Signed-off-by: Eli Schwartz Signed-off-by: Allan McRae --- scripts/libmakepkg/lint_pkgbuild/variable.sh.in | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/scripts/libmakepkg/lint_pkgbuild/variable.sh.in b/scripts/libmakepkg/lint_pkgbuild/variable.sh.in index 5f783e83..1ee3c834 100644 --- a/scripts/libmakepkg/lint_pkgbuild/variable.sh.in +++ b/scripts/libmakepkg/lint_pkgbuild/variable.sh.in @@ -38,12 +38,11 @@ lint_variable() { source) local string=(changelog epoch install pkgbase pkgdesc pkgrel pkgver url) - local i a v pkg keys out bad ret=0 + local i a pkg out bad ret=0 # global variables for i in ${array[@]} ${arch_array[@]}; do - eval "keys=(\"\${!$i[@]}\")" - if (( ${#keys[*]} > 0 )); then + if declare -p $i > /dev/null 2>&1; then if ! is_array $i; then error "$(gettext "%s should be an array")" "$i" ret=1 @@ -55,11 +54,9 @@ lint_variable() { [[ $a == "any" ]] && continue for i in ${arch_array[@]}; do - v="${i}_${a}" - eval "keys=(\"\${!${v}[@]}\")" - if (( ${#keys[*]} > 0 )); then - if ! is_array $v; then - error "$(gettext "%s_%s should be an array")" "$i" "$a" + if declare -p "${i}_${a}" > /dev/null 2>&1; then + if ! is_array ${i}_${a}; then + error "$(gettext "%s should be an array")" "${i}_${a}" ret=1 fi fi @@ -67,8 +64,7 @@ lint_variable() { done for i in ${string[@]}; do - eval "keys=(\"\${!$i[@]}\")" - if (( ${#keys[*]} > 0 )); then + if declare -p "$i" > /dev/null 2>&1; then if is_array $i; then error "$(gettext "%s should not be an array")" "$i" ret=1 -- cgit v1.2.3-54-g00ecf