From c6656eed6ae9536812012a1b0d0b31ec960acf23 Mon Sep 17 00:00:00 2001 From: =?utf8?q?P=C3=A1draig=20Brady?= Date: Fri, 4 Nov 2016 16:55:58 +0000 Subject: [PATCH] dd: warn about counts specified with confusing 0x prefix * src/dd.c (parse_integer): Suggest to use "00x" instead of "0x", which is significant for the "count", "seek", and "skip" operands. * tests/dd/misc.sh: Add a test case. Fixes http://bugs.gnu.org/24874 --- src/dd.c | 6 ++++++ tests/dd/misc.sh | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/dd.c b/src/dd.c index 2c6d4c6ab5..c7f54d4b4b 100644 --- a/src/dd.c +++ b/src/dd.c @@ -1342,6 +1342,12 @@ parse_integer (const char *str, strtol_error *invalid) return 0; } + if (n == 0 && STRPREFIX (str, "0x")) + error (0, 0, + _("warning: %s is a zero multiplier; " + "use %s if that is intended"), + quote_n (0, "0x"), quote_n (1, "00x")); + n *= multiplier; } else if (e != LONGINT_OK) diff --git a/tests/dd/misc.sh b/tests/dd/misc.sh index 2c24b50872..094fc5375f 100755 --- a/tests/dd/misc.sh +++ b/tests/dd/misc.sh @@ -107,4 +107,14 @@ compare err_ok err || fail=1 test $fail -eq 0 && fail=$warn +# Check a warning is issued for ambiguous 0x... numbers +dd if=/dev/null count=0x1 seek=0x1 skip=0x1 status=none 2>err || fail=1 +cat <<\EOF >exp +dd: warning: '0x' is a zero multiplier; use '00x' if that is intended +dd: warning: '0x' is a zero multiplier; use '00x' if that is intended +dd: warning: '0x' is a zero multiplier; use '00x' if that is intended +EOF +compare exp err || fail=1 + + Exit $fail -- 2.47.2