From ff6cc22d062c493c9fee27cfe1d2e6328d502a43 Mon Sep 17 00:00:00 2001 From: Pádraig Brady Date: Wed, 20 Apr 2016 14:03:05 +0100 Subject: 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. --- cfg.mk | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'cfg.mk') diff --git a/cfg.mk b/cfg.mk index 6ef09dd04..c917c874f 100644 --- a/cfg.mk +++ b/cfg.mk @@ -568,6 +568,14 @@ sc_prohibit_test_empty: halt='use `compare /dev/null ...`, not `test -s ...` in tests/' \ $(_sc_search_regexp) +# Ensure that expr doesn't work directly on various unsigned int types, +# as that's not generally supported without GMP. +sc_prohibit_expr_unsigned: + @prohibit='expr .*(UINT|ULONG|[^S]SIZE|[UGP]ID|UINTMAX)' \ + halt='avoid passing unsigned limits to `expr` (without GMP)' \ + in_vc_files='^tests/' \ + $(_sc_search_regexp) + # Programs like sort, ls, expr use PROG_FAILURE in place of EXIT_FAILURE. # Others, use the EXIT_CANCELED, EXIT_ENOENT, etc. macros defined in system.h. # In those programs, ensure that EXIT_FAILURE is not used by mistake. -- cgit v1.2.3-54-g00ecf