Skip to content

Releases: CaddyGlow/HexSpell

HexSpell 1.2.3

Choose a tag to compare

@CaddyGlow CaddyGlow released this 18 Oct 20:59
936dbcb
  • Mach-O
    • Added: Decode every DYLD_CHAINED_PTR_* format from Apple's fixup-chains.h (arm64e userland/userland24/kernel/firmware authenticated binds and rebases, PTR_64, 32-bit, kernel/shared cache and segmented), DYLD_CHAINED_IMPORT_ADDEND/ADDEND64 imports and multi-start pages via decode_chained_pointer_as and ChainedSegment::decode_pointer.
    • Added: MachO::chained_fixup_slots walks chains into ChainedFixupSlots with the on-disk word as a Field, decoded pointer and rebase_vmaddr; PointerAuth::discriminator mirrors dyld's address blending.
    • Added: UnixThreadCommand::program_counter returns the LC_UNIXTHREAD entry PC as a Field for x86, x86-64, ARM, arm64 and PowerPC thread states.
    • Changed: Breaking — ChainedSegment stores the raw page_start[] table (page_starts: Vec<u16>, page_count) plus pointer_format and max_valid_pointer; use chain_starts(page). ChainedImport gains addend and library_ordinal becomes i32; ChainedFixups gains imports_format. ChainedPointer::Bind::addend becomes i64 and the enum gains authenticated, cache, segmented and non-pointer variants.
    • Fixed: Decode 8-bit chained import ordinals 128–240 as dylib ordinals instead of negative special values.
    • Documentation: Optional LIEF differential test for chained fixups (tests/lief.rs).

Crate: https://crates.io/crates/caddy-hexspell/1.2.3

HexSpell 1.2.1

Choose a tag to compare

@CaddyGlow CaddyGlow released this 11 Oct 17:52
e210611
  • General

    • Fixed: Return BufferOverflow for integer reads whose file offsets overflow usize.
  • PE

    • Fixed: Reject cyclic or excessively deep resource directory trees instead of overflowing the stack.
  • ELF

    • Fixed: Reject overflowing extended section-table offsets instead of panicking.
    • Fixed: Validate init/fini array extents before reserving entry storage.
    • Fixed: Validate symbol table extents before reserving entry storage.
  • Mach-O

    • Fixed: Reject cyclic export tries using an iterative traversal instead of overflowing the call stack.
    • Fixed: Validate symbol table extents before reserving entry storage.

Includes executable-format fuzzing harnesses and regression coverage.

Crate: https://crates.io/crates/caddy-hexspell/1.2.1

HexSpell 1.2.0

Choose a tag to compare

@CaddyGlow CaddyGlow released this 10 Oct 22:11
359d50c

Read-only executable parsing now borrows file buffers and streams directory entries while retaining owned buffers for editing.

  • PE: lazy base relocations, streaming imports/exports/relocations/debug records, borrowed names, deduplicated import descriptors, and an optional RVA lookup index.
  • ELF: allocation-free header/entry inspection and borrowed section/symbol names.
  • Mach-O: single-pass command iteration, allocation-free FAT selection, borrowed dylib paths, and disk-based selection that reads only the selected record and thin slice.
  • Full parsers validate table extents before reserving capacity. Allocation regression tests and a dependency-free release benchmark cover the new paths.
  • Includes the PE layout, load-configuration, debug-field, checksum, and structural-edit fixes documented in the changelog.

Breaking API migrations:

  • Replace the PE::base_relocations field with base_relocations()? or base_relocations_iter()?. Relocation validation is deferred until access or image-base editing.
  • Replace the ImportDirectory::descriptors field with descriptors() or each DLL's descriptor field.

See the migration guide and changelog.

Validated with formatting, Clippy, the full test suite, no_std checks, all 12 pefile differential tests over a 15-file corpus, allocation tests, release benchmarks, and a clean package publish dry run.

Crate: https://crates.io/crates/caddy-hexspell/1.2.0

HexSpell 1.1.2

Choose a tag to compare

@CaddyGlow CaddyGlow released this 10 Oct 20:44
60bbf06
  • Fix PE32+ SecurityCookie parsing and patching: the field starts at byte 88 after the eight-byte EditList.
  • Reject undersized load configuration structures and check declared extent arithmetic while accepting larger versions.
  • Include certificate directory bounds validation and TLS offset overflow fixes.

Regression coverage includes distinct EditList/cookie sentinels, patch preservation, and truncated/versioned extents.

Validated with cargo fmt, cargo clippy --all-targets -- -D warnings, cargo test, and cargo publish --dry-run --locked.

Crate: https://crates.io/crates/caddy-hexspell/1.1.2