Pádraig Brady <[EMAIL PROTECTED]> wrote: > Paul Eggert wrote: >> Pádraig Brady <[EMAIL PROTECTED]> writes: >> >>> diff --git a/src/truncate.c b/src/truncate.c >>> index 02d4102..fd321c6 100644 >>> --- a/src/truncate.c >>> +++ b/src/truncate.c >>> @@ -189,9 +189,9 @@ do_ftruncate (int fd, char const *fname, off_t ssize, >>> rel_mode_t rel_mode) >>> } >>> >>> if (rel_mode == rm_min) >>> - nsize = MAX (fsize, ssize); >>> + nsize = MAX (fsize, (uintmax_t) ssize); >>> else if (rel_mode == rm_max) >>> - nsize = MIN (fsize, ssize); >>> + nsize = MIN (fsize, (uintmax_t) ssize); >>> else if (rel_mode == rm_rdn) >>> /* 0..ssize-1 -> 0 */ >>> nsize = (fsize / ssize) * ssize; >> >> This patch does not look right to me. If ssize is negative, it screws up. >> >> Can ssize be negative? Yes it can. > > Not when rel_mode is rm_min or rm_max. > >> This indicates a bug in the underlying code, which GCC was right to >> warn us about, and which we should not have worked around by inserting >> casts blindly. > > As I said in the patch the casts were to confirm the intent, > rather than just to silence the errors.
I see the intent, but we can sneak past the check that detects this: $ ./truncate -s '<-9' k ./truncate: multiple relative modifiers specified Try `./truncate --help' for more information. by adding a space before the "-": $ ./truncate -s '< -9' k && echo whoops whoops _______________________________________________ Bug-coreutils mailing list Bug-coreutils@gnu.org http://lists.gnu.org/mailman/listinfo/bug-coreutils