Skip to content

dd: a zero factor no longer short-circuits the multiplier #14160

Description

@igorgbr

GNU dd stops at the zero factor in a multiplier expression and never looks at
the rest. We now parse every factor first, so a huge one fails before the zero
is taken into account:

$ LC_ALL=C dd count=00x9999999999999999999999999999999999999999999999999999999999999 </dev/null
uutils: dd: invalid number: '00x999…': Value too large for defined data type
        exit=1
GNU:    0+0 records in
        0+0 records out
        0 bytes copied, 1.627e-05 s, 0.0 kB/s
        exit=0

This makes tests/dd/misc.sh fail.

It started with 7f9b9a6 ("dd: reject a number that does not fit in u64"),
which turned ParseSizeError::SizeTooBig into an error instead of u64::MAX
in parse_bytes_with_opt_multiplier. The zero factor case wasn't covered.

Note that fixing this alone doesn't make tests/dd/misc.sh pass the test then
reaches a second difference, dd: failed to seek in output file: Illegal seek.

Compared against GNU coreutils 9.10.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions