v3.0.2
·
147 commits
to master
since this release
What's Changed
Added
- ECMA-376 standard encryption support (read-only) — workbooks encrypted with the
"standard" scheme (2.2/3.2/4.2: AES-ECB, SHA-1, 50,000 fixed iterations) now open the
same way agile-encrypted ones already did, viaExcel.Open(..., options)with a
password. Validated against a real third-party fixture (Apache POI's published
VelvetSweatshop-encrypted file), not just a self-forged one. - Rust bindings:
AllRows/read_all_blobfor columnar bulk row reads.
Fixed
- Two container-parsing bugs surfaced by validating standard encryption against a genuine
third-party file: an incorrectverifierHashSizebound, and the CFB reader demanding a
full physical sector on a container's final, unpadded stream. xl_last_error/xl_read_all_blobwere declared in the native C header but missing from
the Windows.defexport files — a latent link error for native/Rust/Python consumers.ExcelDataReader.Read()corrected pending-row handling.
Performance
- Standard-encryption package decryption reuses one cipher transform across all segments
instead of rebuilding it per 4096-byte segment (~3.8x on a large package). ExcelDataReader.GetBytes/GetCharsno longer round-trip through an allocated string.ExcelReader.Arrow's timestamp column reuses the library's existing allocation-free
date/text parser instead of a duplicate hand-rolled one.- Test suite: the encrypted-container mutation test now runs in parallel (deterministic
failure reporting preserved) — full suite ~40s → ~23s.
No public API changes in this release — PublicAPI.Unshipped.txt is empty across
ExcelReader.Core and ExcelReader.Arrow, both target frameworks.
- feat: ECMA-376 standard encryption support, native bulk-read export, and reader/crypto performance fixes by @GabrielMarquezMatte in #105
Full Changelog: v3.0.1...v3.0.2