ulimit: Fix multiplication overflow

This commit is contained in:
Fabian Boehm 2024-11-30 15:40:48 +01:00
parent 8736d9b1e7
commit eee44b7469
2 changed files with 19 additions and 1 deletions

View file

@ -305,7 +305,16 @@ pub fn ulimit(parser: &Parser, streams: &mut IoStreams, args: &mut [&wstr]) -> O
None => return STATUS_CMD_ERROR,
}
} else if let Ok(limit) = fish_wcstol(w.argv[w.wopt_index]) {
limit as rlim_t * get_multiplier(what)
let Some(x) = get_multiplier(what).checked_mul(limit as rlim_t) else {
streams.err.append(wgettext_fmt!(
"%ls: Invalid limit '%ls'\n",
cmd,
w.argv[w.wopt_index]
));
builtin_print_error_trailer(parser, streams.err, cmd);
return STATUS_INVALID_ARGS;
};
x
} else {
streams.err.append(wgettext_fmt!(
"%ls: Invalid limit '%ls'\n",

View file

@ -5,3 +5,12 @@ ulimit --core-size
ulimit --core-size 0
ulimit --core-size
#CHECK: 0
ulimit 4352353252352352334
#CHECKERR: ulimit: Invalid limit '4352353252352352334'
#CHECKERR:
#CHECKERR: checks/ulimit.fish (line {{\d+}}):
#CHECKERR: ulimit 4352353252352352334
#CHECKERR: ^
#CHECKERR: (Type 'help ulimit' for related documentation)