Commit Graph

9 Commits

Author SHA1 Message Date
GGWA 35d76945ca ELF files with no section headers show their dynamic symbols and functions (#233)
ELF files whose section headers were removed (common in NAS and router firmware) now show their functions, imports and exports. The dynamic symbol table is found through PT_DYNAMIC (DT_SYMTAB/DT_STRTAB, counted from DT_HASH, then DT_GNU_HASH, then an estimate with a warning), shared with the Flutter reader. The prologue scan walks executable segments when there are no sections.

Fixes #223
2026-11-02 13:26:37 +07:00
NetterSilver 32b80be890 A 10-byte LEB128 value whose bits don't fit is rejected instead of truncated (#208)
checked_shl only rejects shift amounts of 64 or more, so payload bits shifted out of the u64 on the tenth byte were dropped; uleb128 now returns None when bits would be lost, and u64::MAX still decodes.
2026-11-02 10:40:37 +07:00
GGWA 648fbd7bde A Mach-O method list at the end of the address space is read without overflowing (#205)
Each method entry's address and its fields' addresses are computed with checked arithmetic, so a method list near the end of the address space ends the list instead of panicking (debug) or reading a wrapped address (release).
2026-11-02 10:09:52 +07:00
Agapenor 481361563b A Flutter library with a header table at the very end of the address range is read safely (#131)
Elf::parse in formats/src/dart.rs skips a program or section header entry that starts past the end of the file, so its field offsets can't overflow.
2026-11-02 01:46:48 +07:00
BFlat ca706dc980 Look for AI offers local servers already set up in OpenCode (#111)
Look for AI reads provider baseURLs from OpenCode's settings and probes those on this computer or its network, so LM Studio on another port or a server on another machine is offered. The JSONC reader moves from setup to formats so ai can use it. Fixes #83.
2026-11-01 23:56:28 +07:00
Agapenor fef3f8231e A .utoc naming billions of empty compression methods no longer runs out of memory (#61)
A .utoc header naming billions of zero-length compression methods no longer collects empty names until memory runs out: only the 255 a block can point at are read, the rest are skipped by length.
2026-11-01 18:40:38 +07:00
GGWA b09b99aaa7 Stop an ELF segment at the end of the file offsets from overflowing (#43)
va_to_off added a PT_LOAD segment's file offset to an address delta unchecked, so a segment whose p_offset is near u64::MAX panicked in debug builds and wrapped in release. It now uses checked_add, so such an address maps to nothing. Two regression tests, one with a crafted ELF64.
2026-11-01 16:33:02 +07:00
GGWA 83f396ac74 Skip an ext inode that starts at the end of the address space (#42)
A group descriptor could point the inode table so far out that an inode started within 128 bytes of usize::MAX; the two checks that an inode fits in the image added 128 unchecked, which panicked in debug builds and wrapped in release. They now use checked_add, so such a root inode is refused and such a child skipped. Two regression tests, and a roadmap line for the same pattern in macho.rs method_list.
2026-11-01 16:32:54 +07:00
Brandon Thomas f64ae3bf3c Craft Anything
A native, pure-Rust app that shows anyone how a piece of software works, with
evidence-backed answers, then helps them rebuild it. It ships a desktop app, a
CLI and an MCP server, all driven by one engine.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 10:52:14 -04:00