We rely on values in the arch array to be valid as part of variable
names, so extend the arch lint check to catch this.

This also cleans up lint_arch to restrict the use of "lint" only to the
package-specific architecture checks. It previously had an odd
declaration with a conditional expansion that would never be true.
---
 scripts/makepkg.sh.in | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index cec190b..0ea6d5f 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -2360,13 +2360,21 @@ lint_epoch() {
 }
 
 lint_arch() {
-       local name list=("${@:-"${arch[@]}"}")
+       local a name list
 
-       if [[ $list == 'any' ]]; then
+       if [[ $arch == 'any' ]]; then
                return 0
        fi
 
-       if ! in_array "$CARCH" "${list[@]}" && (( ! IGNOREARCH )); then
+       for a in "${arch[@]}"; do
+               if [[ $a = *[![:alnum:]_]* ]]; then
+                       error "$(gettext "%s contains invalid characters: 
'%s'")" \
+                                       'arch' "${a//[[:alnum:]_]}"
+                       ret=1
+               fi
+       done
+
+       if (( ! IGNOREARCH )) && ! in_array "$CARCH" "${arch[@]}"; then
                error "$(gettext "%s is not available for the '%s' 
architecture.")" "$pkgbase" "$CARCH"
                plain "$(gettext "Note that many packages may need a line added 
to their %s")" "$BUILDSCRIPT"
                plain "$(gettext "such as %s.")" "arch=('$CARCH')"
-- 
2.0.4

Reply via email to