From d9cd4772d26353b2c236aa7730970a44b4760404 Mon Sep 17 00:00:00 2001 From: BinFlip Date: Sun, 13 Sep 2026 19:07:20 -0700 Subject: [PATCH] chore: release 0.3.2 - ObjectInfo::has_method_table() gates method iteration on a non-zero method count, and diagnostics() flags an uninitialized methods_va. - code_entries() / code_entrypoints() drop unreadable slots and objects instead of aborting the walk. - Replace em-dashes with plain hyphens across docs, comments, and diagnostic message strings. - Use as_chunks::<2>() for UTF-16LE decoding (clippy 1.98 chunks_exact_to_as_chunks). - Refresh transitive dependencies. --- CHANGELOG.md | 102 ++++++++++++++++++++++++------------- Cargo.lock | 37 +++++++++----- Cargo.toml | 4 +- README.md | 12 ++--- build.rs | 4 +- data/opcodes.csv | 2 +- examples/dump.rs | 4 +- src/entrypoint.rs | 4 +- src/error.rs | 14 ++--- src/lib.rs | 16 +++--- src/pcode/calltarget.rs | 6 +-- src/pcode/decoder.rs | 28 +++++----- src/pcode/opcode.rs | 22 ++++---- src/pcode/semantics.rs | 2 +- src/project/methodentry.rs | 2 +- src/project/methodlink.rs | 6 +-- src/project/pcodemethod.rs | 6 +-- src/project/vbcontrol.rs | 2 +- src/project/vbobject.rs | 67 +++++++++++++++--------- src/project/vbproject.rs | 79 ++++++++++++++++++---------- src/trace.rs | 6 +-- src/util.rs | 2 +- src/vb/bstr.rs | 7 +-- src/vb/comreg.rs | 12 ++--- src/vb/constantpool.rs | 4 +- src/vb/control.rs | 8 +-- src/vb/controlprop.rs | 28 +++++----- src/vb/events.rs | 8 +-- src/vb/exports.rs | 54 ++++++++++---------- src/vb/external.rs | 84 +++++++++++++++--------------- src/vb/flags.rs | 4 +- src/vb/formdata.rs | 28 +++++----- src/vb/functype.rs | 43 ++++++++-------- src/vb/guitable.rs | 20 ++++---- src/vb/header.rs | 2 +- src/vb/object.rs | 100 ++++++++++++++++++++++++++---------- src/vb/objecttable.rs | 4 +- src/vb/privateobj.rs | 32 ++++++------ src/vb/procedure.rs | 30 +++++------ src/vb/projectdata.rs | 8 +-- src/vb/projectinfo2.rs | 8 +-- src/vb/property.rs | 20 ++++---- src/vb/publicbytes.rs | 38 +++++++------- src/vb/varstub.rs | 10 ++-- 44 files changed, 557 insertions(+), 422 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dd7439f..4014b09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,12 +6,43 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] -## [0.3.1] +## [0.3.2] - 2026-09-13 + +### Added + +- `ObjectInfo::has_method_table()` - `true` only when `methods_va` is non-zero, + differs from `constants_va`, and the object's own `method_count` is non-zero. +- `VbProject::diagnostics()` reports an `Info` `Quirk` at site `method_table` + when `methods_va` is set but the object's method count is zero (the pointer + is uninitialized, not a dispatch table). + +### Fixed + +- `VbObject::has_method_table()` now delegates to + `ObjectInfo::has_method_table()`. An object with a zero method count no longer + has a descriptor-supplied count iterated over its uninitialized table pointer. +- `VbObject::code_entries()` and `VbProject::code_entrypoints()` are fail-soft + per slot: an unreadable method slot, `proc_size`, or object is dropped (with a + `tracing` warn event under the `tracing` feature) instead of aborting the + whole walk. + +### Changed + +- Replaced em-dashes with plain hyphens across docs, comments, and + `ParseDiagnostic` message strings. Consumers matching on exact diagnostic + message text will see the new punctuation; match on `site` / `kind` instead. +- Refreshed transitive dependencies (`cargo update`). Direct dependencies were + already current. +- UTF-16LE decoding in `BStr::to_string_lossy()` and `FuncTypDesc` string + defaults uses `as_chunks::<2>()` instead of `chunks_exact(2)`, satisfying the + `chunks_exact_to_as_chunks` lint added in clippy 1.98. No behaviour change. + +## [0.3.1] - 2026-08-09 ### Changed - Recorded ATRAPS LLC as copyright holder and added a `NOTICE` file. The Apache-2.0 - appendix was never filled in — it still carried the literal + appendix was never filled in - it still carried the literal `[yyyy] [name of copyright owner]` placeholder, so nothing in this repo stated who owned it. No functional change. - Dropped the deprecated `authors` field and repointed `repository` at the organisation. @@ -20,11 +51,11 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). gated rather than invisible. - Publishing now uses crates.io trusted publishing instead of a stored registry token. -## [0.3.0] — 2026-06-09 +## [0.3.0] - 2026-06-09 ### Added -- `CallApiStub::ordinal()`, `flags()`, and `is_by_ordinal()` — the +- `CallApiStub::ordinal()`, `flags()`, and `is_by_ordinal()` - the `DllFunctionCall` descriptor is 16 bytes (not 8), carrying an import ordinal and a by-ordinal flag (bit 1) after the name pointers. Verified against MSVBVM60.DLL `sub_660315de`. By-ordinal imports omit the API name from the @@ -33,18 +64,18 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). `CallApiStub`, exposing ordinal / by-ordinal state for declared imports (e.g. `Declare ... Alias "#123"`). - `controlprop::CleanupAction` plus `ControlPropertyType::cleanup_action()` - and `is_reference()` — the runtime resource-release classification + and `is_reference()` - the runtime resource-release classification (`FreeString` / `FreeVariant` / `ReleaseObject` / `DestroyArray` / `UnlockArray` / `DestructRecord`) for each class/form instance member, recovered from `CleanupSingleEntry` (0x66016AAA). -- `decoder::ErrorFlow` plus `Instruction::error_flow()` — classifies a +- `decoder::ErrorFlow` plus `Instruction::error_flow()` - classifies a `Resume` / `OnErrorGoto` instruction's signed operand into its source-level construct (`Resume`, `Resume Next`, `Resume