release: 2.7.1 - #199
Conversation
…TO_ENTRY - Copy old zval descriptor into temporary stack variable and commit new entry state before calling zval_ptr_dtor() in judy_object_write_dimension_helper() and Judy::set(). - Delete entry key from JudySL prior to calling zval_ptr_dtor() in Judy::pruneExpired() to prevent double-free or UAF if a destructor re-enters. - Add regression test regression_string_to_entry_reentrancy_001.phpt.
Test Results
Benchmark Results
Run Status
Memory (Linux, PHP 8.6)Peak RSS of a child process building one structure, n = 500,000, minus an empty-process floor. Judy's memory advantage is type- and scale-dependent — see BENCHMARK.md for the curve across sizes on a dedicated host.
API Speedups (Linux, PHP 8.6)Speedup = PHP time / Judy time. Bold = Judy faster.
Core Types (Linux, PHP 8.6)Speedup = PHP time / Judy time. Bold = Judy faster.
All types detailCore Types (Linux, PHP 8.6) — AllSpeedup = PHP time / Judy time. Bold = Judy faster.
Cross-version detail (Linux)Core Types — LinuxEach cell: Judy ms (speedup vs PHP array).
API — Linux
Cross-version detail (Windows)Core Types — WindowsEach cell: Judy ms (speedup vs PHP array).
API — Windows
Windows results (PHP 8.6)Memory (Windows, PHP 8.6)Peak RSS of a child process building one structure, n = 500,000, minus an empty-process floor. Judy's memory advantage is type- and scale-dependent — see BENCHMARK.md for the curve across sizes on a dedicated host.
API Speedups (Windows, PHP 8.6)Speedup = PHP time / Judy time. Bold = Judy faster.
Core Types (Windows, PHP 8.6)Speedup = PHP time / Judy time. Bold = Judy faster.
All types detailCore Types (Windows, PHP 8.6) — AllSpeedup = PHP time / Judy time. Bold = Judy faster.
Release Comparison (2.6.0 → 2.7.1)
Summary:
4 benchmarks not evaluated (within-arm scatter exceeded the effect being claimed)
Memory ComparisonMemory: 0 regressions, 10 unchanged
Full benchmark outputLinux — PHP 8.6Windows — PHP 8.6 |
Release 2.7.1
Judy::STRING_TO_ENTRYduring ArrayAccess overwrites,Judy::set(), andJudy::pruneExpired()sweeps (fix(security): guard against destructor reentrancy and UAF on STRING_TO_ENTRY #198).zval_ptr_dtor(), and unlinks keys from the JudySL trie before freeing entry structs.PHP_JUDY_VERSIONandpackage.xmlto2.7.1.