summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlolilolicon <lolilolicon@gmail.com>2011-09-29 04:45:20 +0200
committerDan McGee <dan@archlinux.org>2011-09-29 20:02:41 +0200
commit83c05e71bc6e614f6f3d190d5e752a0c5239a2d1 (patch)
treeeddaeb10baf0c7bdbac98c8a670e752d17f905b6
parent1463a9aa3646a0886b7ec892f4a436ea5bb4749a (diff)
downloadpacman-83c05e71bc6e614f6f3d190d5e752a0c5239a2d1.tar.gz
pacman-83c05e71bc6e614f6f3d190d5e752a0c5239a2d1.tar.xz
paccache: allow strictly integer for -k option
Verify the argument to -k is a non-negative integer. Leading zeros are simply stripped. 'declare -i keep' allowed the argument to -k to be any arithmetic evaluation expression. The simple assignment 'keep=$OPTARG' triggers arithmetic evaluation implicitly, which can either consume a huge amount of resources with input such as '2**2**32' or immediately produce an error on invalid input. Instead, we simply 'declare -- keep' and avoid all that. Signed-off-by: lolilolicon <lolilolicon@gmail.com> Signed-off-by: Dave Reisner <dreisner@archlinux.org>
-rwxr-xr-xcontrib/paccache.in8
1 files changed, 5 insertions, 3 deletions
diff --git a/contrib/paccache.in b/contrib/paccache.in
index 11b7bbb5..7c35cf28 100755
--- a/contrib/paccache.in
+++ b/contrib/paccache.in
@@ -21,8 +21,8 @@
shopt -s extglob
declare -a candidates=() cmdopts=() whitelist=() blacklist=()
-declare -i delete=0 dryrun=0 filecount=0 keep=3 move=0 totalsaved=0
-declare cachedir=@localstatedir@/cache/pacman/pkg delim=$'\n' movedir= scanarch=
+declare -i delete=0 dryrun=0 filecount=0 move=0 totalsaved=0
+declare cachedir=@localstatedir@/cache/pacman/pkg delim=$'\n' keep=3 movedir= scanarch=
msg() {
local mesg=$1; shift
@@ -220,8 +220,10 @@ while getopts ':a:c:dfhi:k:m:rsuvz' opt; do
blacklist+=("${ign[@]}")
unset i ign ;;
k) keep=$OPTARG
- if [[ $keep != $OPTARG ]] || (( keep < 0 )); then
+ if [[ -z $keep || -n ${keep//[0-9]/} ]]; then
die 'argument to option -k must be a non-negative integer'
+ else
+ keep=$(( 10#$keep ))
fi ;;
m) move=1 movedir=$OPTARG ;;
r) delete=1 ;;