authorgravatar for 4678790+dweiller@users.noreply.github.comDominic <4678790+dweiller@users.noreply.github.com> 2023-02-04 11:39:48+11:00
committergravatar for 4678790+dweiller@users.noreply.github.comDominic <4678790+dweiller@users.noreply.github.com> 2023-02-20 09:09:06+11:00
loga625df463648b7f6ff2d15de8be5e168c8bc7363
tree6cb5aed7fe9695b0431f1cedfbd7ae67eebe99b4
parent1c509f483aef8b826f02ffc7ab8d1f2cfcec0d36

std.compress.zstandard: fix fse decoding crash


1 files changed, 2 insertions(+), 0 deletions(-)

  • folderlib
lib/std/compress/zstandard/decode/fse.zig+2
...@@ -46,6 +46,7 @@ pub fn decodeFseTable(...@@ -46,6 +46,7 @@ pub fn decodeFseTable(
46 if (value == 1) {46 if (value == 1) {
47 while (true) {47 while (true) {
48 const repeat_flag = try bit_reader.readBitsNoEof(u2, 2);48 const repeat_flag = try bit_reader.readBitsNoEof(u2, 2);
49 if (repeat_flag + value_count > 256) return error.MalformedFseTable;
49 var i: usize = 0;50 var i: usize = 0;
50 while (i < repeat_flag) : (i += 1) {51 while (i < repeat_flag) : (i += 1) {
51 values[value_count] = 1;52 values[value_count] = 1;
...@@ -54,6 +55,7 @@ pub fn decodeFseTable(...@@ -54,6 +55,7 @@ pub fn decodeFseTable(
54 if (repeat_flag < 3) break;55 if (repeat_flag < 3) break;
55 }56 }
56 }57 }
58 if (value_count == 256) break;
57 }59 }
58 bit_reader.alignToByte();60 bit_reader.alignToByte();
5961