summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Reisner <dreisner@archlinux.org>2014-08-09 18:08:13 -0400
committerAllan McRae <allan@archlinux.org>2014-09-23 21:43:16 +1000
commit9c066dff439ba453f4c362e1875b794cf3f362ed (patch)
treea92bb63ed23bcf8d0a1ba1abb6199b693fc6544b
parent85c055da73022838c13acae0554e6efa75dacf83 (diff)
downloadpacman-9c066dff439ba453f4c362e1875b794cf3f362ed.tar.xz
makepkg: disallow values of 'arch' which might be problematic
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.
-rw-r--r--scripts/makepkg.sh.in14
1 files changed, 11 insertions, 3 deletions
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 2518e668..49f5e599 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -2359,13 +2359,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')"