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