| ... | ... | @@ -245,7 +245,8 @@ fn readInner(d: *Decompress, w: *Writer, limit: std.Io.Limit) (Error || Reader.S |
| 245 | 245 | var dec_lens: [286 + 30]u4 = @splat(0); |
| 246 | 246 | var pos: usize = 0; |
| 247 | 247 | while (pos < hlit + hdist) { |
| 248 | | const sym = try cl_dec.find(@bitReverse(try d.peekBits(u7))); |
| 248 | const peeked = @bitReverse(try d.peekBits(u7)); |
| 249 | const sym = try cl_dec.find(peeked); |
| 249 | 250 | try d.tossBits(sym.code_bits); |
| 250 | 251 | pos += try d.dynamicCodeLength(sym.symbol, &dec_lens, pos); |
| 251 | 252 | } |
| ... | ... | @@ -377,7 +378,7 @@ fn takeBits(d: *Decompress, comptime T: type) !T { |
| 377 | 378 | error.EndOfStream => return takeBitsEnding(d, T), |
| 378 | 379 | }; |
| 379 | 380 | const needed_bits = @bitSizeOf(T) - remaining_bits; |
| 380 | | const u: U = @intCast((next_bits << needed_bits) | (next_int & ((@as(usize, 1) << needed_bits) - 1))); |
| 381 | const u: U = @intCast(((next_int & ((@as(usize, 1) << needed_bits) - 1)) << remaining_bits) | next_bits); |
| 381 | 382 | d.next_bits = next_int >> needed_bits; |
| 382 | 383 | d.remaining_bits = @intCast(@bitSizeOf(usize) - @as(usize, needed_bits)); |
| 383 | 384 | return switch (@typeInfo(T)) { |
| ... | ... | @@ -434,7 +435,7 @@ fn peekBits(d: *Decompress, comptime T: type) !T { |
| 434 | 435 | error.EndOfStream => return peekBitsEnding(d, T), |
| 435 | 436 | }; |
| 436 | 437 | const needed_bits = @bitSizeOf(T) - remaining_bits; |
| 437 | | const u: U = @intCast((next_bits << needed_bits) | (next_int & ((@as(usize, 1) << needed_bits) - 1))); |
| 438 | const u: U = @intCast(((next_int & ((@as(usize, 1) << needed_bits) - 1)) << remaining_bits) | next_bits); |
| 438 | 439 | return switch (@typeInfo(T)) { |
| 439 | 440 | .int => u, |
| 440 | 441 | .@"enum" => @enumFromInt(u), |
| ... | ... | @@ -983,11 +984,10 @@ test "fuzzing tests" { |
| 983 | 984 | .{ .input = "puff27", .err = error.InvalidDynamicBlockHeader }, |
| 984 | 985 | }; |
| 985 | 986 | |
| 986 | | inline for (cases, 0..) |c, case_no| { |
| 987 | inline for (cases) |c| { |
| 987 | 988 | var in: Reader = .fixed(@embedFile("testdata/fuzz/" ++ c.input ++ ".input")); |
| 988 | 989 | var aw: Writer.Allocating = .init(testing.allocator); |
| 989 | 990 | defer aw.deinit(); |
| 990 | | errdefer std.debug.print("test case failed {}\n", .{case_no}); |
| 991 | 991 | |
| 992 | 992 | var decompress: Decompress = .init(&in, .raw, &.{}); |
| 993 | 993 | const r = &decompress.reader; |