fix valid_number_of_base

function execution halts entirely on a invalid base, so we never
actually get to our 'return 1'. I'm not sure how our expected failures
ever actually worked, but it's quite plain to see that:

  $ a=$(( 2#3 )); echo hi

Never echos "hi". Use a subshell in valid_number_of_base so that we can
properly "trap" execution, and return a meaningful result.
This commit is contained in:
Dave Reisner 2014-12-15 09:01:51 -05:00
parent 25c058a2a2
commit e0eaca918e
2 changed files with 7 additions and 2 deletions

6
common
View File

@ -95,11 +95,15 @@ chroot_umount() {
umount "${CHROOT_ACTIVE_MOUNTS[@]}"
}
try_cast() (
_=$(( $1#$2 ))
) 2>/dev/null
valid_number_of_base() {
local base=$1 len=${#2} i=
for (( i = 0; i < len; i++ )); do
{ _=$(( $base#${2:i:1} )) || return 1; } 2>/dev/null
try_cast "$base" "${2:i:1}" || return 1
done
return 0

View File

@ -11,4 +11,5 @@ EXPECT_success valid_number_of_base 10 1234567890
EXPECT_failure valid_number_of_base 10 1234.567890
EXPECT_failure valid_number_of_base 10 1234567890abcdef
EXPECT_success valid_number_of_base 18 1234567890abcdefghi
EXPECT_success valid_number_of_base 18 1234567890abcdefgh
EXPECT_failure valid_number_of_base 18 1234567890abcdefghi