From 6ebe375a3e397d5092f907cb07568386f6f53e11 Mon Sep 17 00:00:00 2001 From: Natanael Copa <ncopa@alpinelinux.org> Date: Thu, 10 Oct 2024 13:58:49 +0200 Subject: [PATCH] abuild: validate versioned dependencies --- abuild.in | 39 ++++++++++++++++++++++++++++++--------- tests/abuild_test | 6 ++++++ 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/abuild.in b/abuild.in index a4bc3e5e..e594d167 100644 --- a/abuild.in +++ b/abuild.in @@ -227,6 +227,11 @@ default_validate() { verify_pkgname "${i%%:*}" || die "${i%%:*} is not a valid package name" done + # check dependencies + for i in $depends $makedepends; do + check_depver "$i" || return 1 + done + for i in $install; do local n=${i%.*} local suff=${i##*.} @@ -1069,15 +1074,31 @@ check_provides() { } check_depver() { - case "$1" in - *=*) - if ! $APK version --check --quiet "${1#*=}"; then - error "Invalid version: ${i#*=}" - return 1 - fi - ;; - esac - return 0 + local name="${1%%[<>=~]*}" + if [ "$name" = "$1" ]; then + # no version constraint + return 0 + fi + + local ver="${1##*[<>=~]}" + + if ! $APK version --check --quiet "$ver"; then + error "Invalid version: $ver in $1" + return 1 + fi + + local sep=${1#$name} + sep=${sep%$ver} + + local i + for i in "<" ">" "=" "~" ">=" "<=" ">~" "<~"; do + if [ "$sep" = "$i" ]; then + return 0 + fi + done + + error "Invalid version separator '$sep' in $1" + return 1 } prepare_metafiles() { diff --git a/tests/abuild_test b/tests/abuild_test index a2120ece..e6de1930 100755 --- a/tests/abuild_test +++ b/tests/abuild_test @@ -490,6 +490,12 @@ abuild_validate_depends_body() { atf_check -s exit:0 \ -e match:"Validating" \ abuild validate + + for i in "foo=bar" "foo=~1.0" "foo>1.0_invalid"; do \ + TESTDEPENDS="$i" atf_check -s exit:1 \ + -e match:"Validating" \ + abuild validate + done } abuild_subpackage_arch_body() { -- GitLab