mirror of
https://github.com/fish-shell/fish-shell.git
synced 2025-02-23 01:16:26 +08:00
Fix #9899 integer overflow in string repeat
We could end up overflowing if we print out something that's a multiple of the chunk size, which would then finish printing in the chunk-printing, but not break out early. (cherry picked from commit 6325b3662de122b571e33b7121cfc9d172d483bc)
This commit is contained in:
parent
a573d13cf0
commit
a7c8e0cdfb
@ -1541,7 +1541,7 @@ static int string_repeat(parser_t &parser, io_streams_t &streams, int argc, cons
|
||||
wcstring chunk;
|
||||
chunk.reserve(std::min(chunk_size + w.length(), max));
|
||||
|
||||
for (size_t i = max; i > 0; i -= w.length()) {
|
||||
for (size_t i = max; i > 0;) {
|
||||
// Build up the chunk.
|
||||
if (i >= w.length()) {
|
||||
chunk.append(w);
|
||||
@ -1549,6 +1549,9 @@ static int string_repeat(parser_t &parser, io_streams_t &streams, int argc, cons
|
||||
chunk.append(w.substr(0, i));
|
||||
break;
|
||||
}
|
||||
|
||||
i -= w.length();
|
||||
|
||||
if (chunk.length() >= chunk_size) {
|
||||
// We hit the chunk size, write it repeatedly until we can't anymore.
|
||||
streams.out.append(chunk);
|
||||
|
@ -530,6 +530,10 @@ string repeat -n 17 a | string length
|
||||
string repeat -m 5 (string repeat -n 500000 aaaaaaaaaaaaaaaaaa) | string length
|
||||
# CHECK: 5
|
||||
|
||||
# might cause integer overflow
|
||||
string repeat -n 2999 \n | count
|
||||
# CHECK: 3000
|
||||
|
||||
# Test equivalent matches with/without the --entire, --regex, and --invert flags.
|
||||
string match -e x abc dxf xyz jkx x z
|
||||
or echo exit 1
|
||||
|
Loading…
x
Reference in New Issue
Block a user