aboutsummaryrefslogtreecommitdiff
path: root/lib/std
diff options
context:
space:
mode:
authordweiller <4678790+dweiller@users.noreplay.github.com>2023-02-04 11:39:48 +1100
committerdweiller <4678790+dweiller@users.noreplay.github.com>2023-02-20 09:09:06 +1100
commita625df463648b7f6ff2d15de8be5e168c8bc7363 (patch)
tree6cb5aed7fe9695b0431f1cedfbd7ae67eebe99b4 /lib/std
parent1c509f483aef8b826f02ffc7ab8d1f2cfcec0d36 (diff)
downloadzig-a625df463648b7f6ff2d15de8be5e168c8bc7363.tar.gz
zig-a625df463648b7f6ff2d15de8be5e168c8bc7363.zip
std.compress.zstandard: fix fse decoding crash
Diffstat (limited to 'lib/std')
-rw-r--r--lib/std/compress/zstandard/decode/fse.zig2
1 files changed, 2 insertions, 0 deletions
diff --git a/lib/std/compress/zstandard/decode/fse.zig b/lib/std/compress/zstandard/decode/fse.zig
index 5f87c1f81b..726891873c 100644
--- a/lib/std/compress/zstandard/decode/fse.zig
+++ b/lib/std/compress/zstandard/decode/fse.zig
@@ -46,6 +46,7 @@ pub fn decodeFseTable(
if (value == 1) {
while (true) {
const repeat_flag = try bit_reader.readBitsNoEof(u2, 2);
+ if (repeat_flag + value_count > 256) return error.MalformedFseTable;
var i: usize = 0;
while (i < repeat_flag) : (i += 1) {
values[value_count] = 1;
@@ -54,6 +55,7 @@ pub fn decodeFseTable(
if (repeat_flag < 3) break;
}
}
+ if (value_count == 256) break;
}
bit_reader.alignToByte();