]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
dd: warn about counts specified with confusing 0x prefix
authorPádraig Brady <P@draigBrady.com>
Fri, 4 Nov 2016 16:55:58 +0000 (16:55 +0000)
committerPádraig Brady <P@draigBrady.com>
Fri, 4 Nov 2016 20:38:32 +0000 (20:38 +0000)
* 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
tests/dd/misc.sh

index 2c6d4c6ab55ea49b2aeca11db2371ed2c421bffa..c7f54d4b4b49d5546065418655b806c296fd6273 100644 (file)
--- 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)
index 2c24b50872cf94f3c3dee8f9e74fd68503848218..094fc5375f22adacd28eead25cc6d26fab43ef45 100755 (executable)
@@ -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