Skip to content

v3.0.2

Choose a tag to compare

@GabrielMarquezMatte GabrielMarquezMatte released this 09 Sep 17:40
· 147 commits to master since this release
3c0fb66

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, via Excel.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_blob for columnar bulk row reads.

Fixed

  • Two container-parsing bugs surfaced by validating standard encryption against a genuine
    third-party file: an incorrect verifierHashSize bound, and the CFB reader demanding a
    full physical sector on a container's final, unpadded stream.
  • xl_last_error/xl_read_all_blob were declared in the native C header but missing from
    the Windows .def export 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/GetChars no 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