Ryan Liptak
08f0780cb2
zstd.Decompress.stream: Fix handling of skippable frames in new_frame state
...
The previous code assumed that `initFrame` during the `new_frame` state would always result in the `in_frame` state, but that's not always the case. `initFrame` can also result in the `skippable_frame` state, which would lead to access of union field 'in_frame' while field 'skipping_frame' is active.
Now, the switch is re-entered with the updated state so either case is handled appropriately.
Fixes the crashes from https://github.com/ziglang/zig/issues/24817
2025-08-14 17:37:51 -07:00
Andrew Kelley
e252e6c696
Merge pull request #24847 from squeek502/zstd-partial-magic
...
zstd.Decompress: Treat a partial magic number as a failure
2025-08-14 16:08:06 -07:00
Ryan Liptak
353cf1f671
zstd.Decompress: Delete unused/impossible "end" state
2025-08-14 14:08:49 -07:00
Ryan Liptak
60b0b21296
zstd.Decompress: Treat a partial magic number as a failure
...
Previously, the "allow EndOfStream" part of this logic was too permissive. If there are a few dangling bytes at the end of the stream, that should be treated as a bad magic number. The only case where EndOfStream is allowed is when the stream is truly at the end, with exactly zero bytes available.
2025-08-14 14:08:49 -07:00
Andrew Kelley
af7e142485
std.Io.Writer: introduce rebase to the vtable
...
fixes #24814
2025-08-14 12:56:37 -07:00
Isaac Freund
b8124d9c0b
std.io.Writer.Allocating: rename getWritten() to written()
...
This "get" is useless noise and was copied from FixedBufferWriter.
Since this API has not yet landed in a release, now is a good time
to make the breaking change to fix this.
2025-08-13 01:43:52 -07:00
Andrew Kelley
749f10af49
std.ArrayList: make unmanaged the default
2025-08-11 15:52:49 -07:00
Andrew Kelley
df46ee61c4
std.Io.Writer.Allocating: configurable bump amount
2025-08-08 19:22:08 -07:00
Andrew Kelley
91a81d3846
std.compress.flate.Decompress: fix buffer size in test
2025-08-08 15:03:05 -07:00
Ryan Liptak
23fff3442d
flate: Handle invalid block type
...
Fixes `panic: invalid enum value` when the type bits had the u2 value of 3.
Contributes towards #24741
2025-08-08 12:27:25 -07:00
Igor Anić
6de2310035
flate change bit reader Bits to usize ( #24719 )
...
Don't see why byte returned from specialPeek needs to be shifted by
remaining_needed_bits.
I believe that decision in specialPeek should be done on the number of
the remaining bits not of the content of that bits.
Some test result are changed, but they are now consistent with the
original state as found in:
5f790464b0/lib/std/compress/flate/Decompress.zig
Changing Bits from usize to u32 or u64 now returns same results.
* flate: simplify peekBitsEnding
`peekBits` returns at most asked number of bits. Fails with EndOfStream
when there are no available bits. If there are less bits available than
asked still returns that available bits.
Hopefully this change better reflects intention. On first input stream
peek error we break the loop.
2025-08-07 14:40:08 -07:00
Igor Anić
d2149106a6
flate zlib fix end of block reading
...
`n` is wanted number of bits to toss
`buffered_n` is actual number of bytes in `next_int`
2025-08-05 17:09:41 -07:00
Ian Johnson
96be6f6566
std.compress.flate.Decompress: return correct size for unbuffered decompression
...
Closes #24686
As a bonus, this commit also makes the `git.zig` "testing `main`" compile again.
2025-08-04 19:32:14 -07:00
Andrew Kelley
a6f7927764
std.compress.flate.Decompress: use 64 buffered bits
...
will have to find out why usize doesn't work for 32 bit targets some
other time
2025-08-01 09:04:27 -07:00
Andrew Kelley
64814dc986
std.compress.flate.Decompress: respect stream limit
2025-07-31 22:10:11 -07:00
Andrew Kelley
a7808892f7
std.compress.flate.Decompress: be in indirect or direct mode
...
depending on whether buffered
2025-07-31 22:10:11 -07:00
Andrew Kelley
6eac56caf7
std.compress.flate.Decompress: allow users to swap out Writer
2025-07-31 22:10:11 -07:00
Andrew Kelley
c9ff068391
std.compress: fix discard impl and flate error detection
2025-07-31 22:10:11 -07:00
Andrew Kelley
111305678c
std: match readVec fn prototype exactly
...
this is not necessary according to zig language, but works around a flaw
in the C backend
2025-07-31 22:10:11 -07:00
Andrew Kelley
4c04835a08
std.compress.zstd.Decompress: implement discard and readVec
2025-07-31 22:10:11 -07:00
Andrew Kelley
84e4343b0c
fix test failures by adding readVec
2025-07-31 22:10:11 -07:00
Andrew Kelley
afe9f3a9ec
std.compress.flate.Decompress: implement readVec and discard
2025-07-31 22:10:11 -07:00
Andrew Kelley
6bcced31a0
fix 32-bit compilation
2025-07-31 22:10:11 -07:00
Andrew Kelley
42b10f08cc
std.compress.flate.Decompress: delete bad unit tests
...
if I remove the last input byte from "don't read past deflate stream's
end" (on master branch), the test fails with error.EndOfStream. what,
then, is it supposed to be testing?
2025-07-31 22:10:11 -07:00
Andrew Kelley
5f790464b0
std.compress.flate.Decompress: hashing is out of scope
...
This API provides the data; applications can verify their own checksums.
2025-07-31 22:10:11 -07:00
Andrew Kelley
4741a16d9a
putting stuff back does not require mutation
2025-07-31 22:10:11 -07:00
Andrew Kelley
05ce1f99a6
compiler: update to new flate API
2025-07-31 22:10:11 -07:00
Andrew Kelley
2569f4ff85
simplify tossBitsEnding
2025-07-31 22:10:11 -07:00
Andrew Kelley
5bc63794cc
fix takeBitsEnding
2025-07-31 22:10:11 -07:00
Andrew Kelley
63f496c4f9
make takeBits deal with integers only
2025-07-31 22:10:11 -07:00
Andrew Kelley
c00fb86db6
fix peekBitsEnding
2025-07-31 22:10:11 -07:00
Andrew Kelley
8ab91a6fe9
error.EndOfStream disambiguation
2025-07-31 22:10:11 -07:00
Andrew Kelley
f644f40702
implement tossBitsEnding
2025-07-31 22:10:11 -07:00
Andrew Kelley
2d8d0dd9b0
std.compress.flate.Decompress: unfuck the test suite
2025-07-31 22:10:11 -07:00
Andrew Kelley
c684b21b4f
simplify test cases
2025-07-31 22:10:11 -07:00
Andrew Kelley
ac4fbb427b
std.compress.flate.Decompress: don't compute checksums
...
These have no business being in-bound; simply provide the expected
values to user code for maximum flexibility.
2025-07-31 22:10:11 -07:00
Andrew Kelley
5f571f53d6
refactor gzip test cases
...
zig newbies love using for loops in unit tests
2025-07-31 22:10:11 -07:00
Andrew Kelley
e73ca2444e
std.compress.flate.Decompress: implement peekBitsEnding and writeMatch
2025-07-31 22:10:11 -07:00
Andrew Kelley
7bf91d705c
fix bit read not at eof
2025-07-31 22:10:11 -07:00
Andrew Kelley
73e5594c78
std.compress.flate.Decompress: fix bit read at eof
2025-07-31 22:10:11 -07:00
Andrew Kelley
9c8cb777d4
std.compress.flate.Decompress: implement more bit reading
2025-07-31 22:10:11 -07:00
Andrew Kelley
6509fa1cf3
std.compress.flate.Decompress: passing basic test case
2025-07-31 22:10:11 -07:00
Andrew Kelley
88ca750209
std.compress.flate.Decompress: add rebase impl
2025-07-31 22:10:11 -07:00
Andrew Kelley
1b43551190
std.Io: remove BitWriter
2025-07-31 22:10:11 -07:00
Andrew Kelley
824c157e0c
std.compress.flate: finish reorganizing
2025-07-31 22:10:11 -07:00
Andrew Kelley
a4f05a4588
delete flate implementation
2025-07-31 22:10:11 -07:00
Andrew Kelley
83513ade35
std.compress: rework flate to new I/O API
2025-07-31 22:10:11 -07:00
Andrew Kelley
cf7a28febb
std.Io.Reader: introduce readVec back into the VTable
...
simplifies and fixes things
addresses a subset of #24608
2025-07-30 09:26:34 -07:00
Andrew Kelley
1fcaf90dd3
std.Io.Reader: make fillUnbuffered respect prexisting buffer
...
addresses only one usage pattern in #24608
2025-07-29 23:10:50 -07:00
Andrew Kelley
bb29846732
std.compress.xz: eliminate dependency on std.Io.bitReader
2025-07-27 22:08:52 -07:00