mirror of
git://git.sv.gnu.org/coreutils.git
synced 2026-04-21 03:12:48 +02:00
tests: avoid potential overflows with expr
* cfg.mk (sc_prohibit_expr_unsigned): expr uses intmax_t internally when GMP is not available, so flag any uses of unsigned limits. * tests/misc/timeout-parameters.sh: Remove the overflow related to UINT_MAX as it's handled by the following case. Change the following case from 99... to $TIME_T_OFLOW to be more expressive in what it's actually testing. Directly check that commands succeed, rather than inspecting $? afterwards. * tests/dd/skip-seek-past-dev.sh: Guard against large device sizes. * tests/id/setgid.sh: Protect: Guard against large group IDs. * tests/misc/cut-huge-range.sh: Tweak comment to avoid syntax check. It's tempting to simplify to just skip the test if expr fails, but SIZE_MAX > INTMAX_MAX is the common case.
This commit is contained in:
@@ -39,7 +39,8 @@ dev_size=$(get_device_size "$device") ||
|
||||
skip_ "failed to determine size of $device"
|
||||
|
||||
# Don't use shell arithmetic as older versions of dash use longs
|
||||
DEV_OFLOW=$(expr $dev_size + 1)
|
||||
DEV_OFLOW=$(expr $dev_size + 1) ||
|
||||
skip_ "failed to adjust device size $dev_size"
|
||||
|
||||
timeout 10 dd bs=1 skip=$DEV_OFLOW count=0 status=noxfer < "$device" 2> err
|
||||
test "$?" = "1" || fail=1
|
||||
|
||||
@@ -21,7 +21,9 @@ print_ver_ id
|
||||
require_root_
|
||||
|
||||
# Construct a different group number
|
||||
gp1=$(expr $NON_ROOT_GID + 1)
|
||||
gp1=$NON_ROOT_GID
|
||||
gp1=$(expr $gp1 + 1) ||
|
||||
skip_ "failed to adjust GID $NON_ROOT_GID"
|
||||
|
||||
echo $gp1 > exp || framework_failure_
|
||||
|
||||
|
||||
@@ -46,7 +46,8 @@ subtract_one='
|
||||
# Ensure we can cut up to our sentinel value.
|
||||
# This is currently SIZE_MAX, but could be raised to UINTMAX_MAX
|
||||
# if we didn't allocate memory for each line as a unit.
|
||||
# Don't use expr to subtract one, since SIZE_MAX may exceed its maximum value.
|
||||
# Don't use expr to subtract one,
|
||||
# since SIZE_MAX may exceed its maximum value.
|
||||
CUT_MAX=$(echo $SIZE_MAX | sed "$subtract_one")
|
||||
|
||||
# From coreutils-8.10 through 8.20, this would make cut try to allocate
|
||||
|
||||
@@ -38,29 +38,22 @@ test $? = 125 || fail=1
|
||||
# It was seen on 32 bit Linux/HPPA that a kernel time_t overflowed,
|
||||
# thus causing the timer to fire immediately.
|
||||
# So verify that doesn't happen before checking large timeouts
|
||||
KERNEL_OVERFLOW_LIMIT=$(expr $TIME_T_MAX - $(date +%s) + 100)
|
||||
KERNEL_OVERFLOW_LIMIT=$(expr $TIME_T_MAX - $(date +%s) + 100) ||
|
||||
skip_ "failed to adjust TIME_T_MAX $TIME_T_MAX"
|
||||
timeout $KERNEL_OVERFLOW_LIMIT sleep 0
|
||||
if test $? != 124; then
|
||||
# timeout overflow
|
||||
timeout $UINT_OFLOW sleep 0
|
||||
test $? = 0 || fail=1
|
||||
timeout $UINT_OFLOW sleep 0 || fail=1
|
||||
|
||||
# timeout overflow
|
||||
timeout $(expr $UINT_MAX / 86400 + 1)d sleep 0
|
||||
test $? = 0 || fail=1
|
||||
|
||||
# timeout overflow
|
||||
timeout 999999999999999999999999999999999999999999999999999999999999d sleep 0
|
||||
test $? = 0 || fail=1
|
||||
timeout ${TIME_T_OFLOW}d sleep 0 || fail=1
|
||||
|
||||
# floating point notation
|
||||
timeout 2.34e+5d sleep 0
|
||||
test $? = 0 || fail=1
|
||||
timeout 2.34e+5d sleep 0 || fail=1
|
||||
fi
|
||||
|
||||
# floating point notation
|
||||
timeout 2.34 sleep 0
|
||||
test $? = 0 || fail=1
|
||||
timeout 2.34 sleep 0 || fail=1
|
||||
|
||||
# nanoseconds potentially supported
|
||||
timeout .999999999 sleep 0 || fail=1
|
||||
|
||||
Reference in New Issue
Block a user