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
This commit is contained in:
Pádraig Brady
2016-11-04 16:55:58 +00:00
parent d0ddfadfb2
commit c6656eed6a
2 changed files with 16 additions and 0 deletions

View File

@@ -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)

View File

@@ -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