• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

ptondereau / ext-php-rs
66%
master: 66%

Build:
Build:
LAST BUILD BRANCH: fix/string-prop-getter-zend-string-leak
DEFAULT BRANCH: master
Repo Added 01 Apr 2026 02:57PM UTC
Token Y7FoKFtsn51OXQH6dAAozlw5G2JFddXKH regen
Build 18 Last
Files 96
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

LAST BUILD ON BRANCH fix/string-prop-getter-zend-string-leak
branch: SELECT
CHANGE BRANCH
x
Sync Branches
  • No branch selected
  • feat/cache-slot-property-lookup
  • feat/module-globals
  • feat/sapi-trait-and-zts
  • feat/static-property-descriptors
  • fix/729-binary-interned-heap-corruption
  • fix/clippy-1-95-0
  • fix/null-pointer-sapi-trampolines
  • fix/string-prop-getter-zend-string-leak

13 May 2026 04:40PM UTC coverage: 66.23%. First build
25812954678

push

github

ptondereau
docs(prop): document the Exception::getMessage refcount leak

Hit this while building a PHPStan rule on top of biscuit-php and noticing
memory growing on every datalog parse error. Tracking it down: any
`#[php(prop)]` field holding an owned refcounted type (String, Vec, etc.)
leaks one zend_string per call when PHP's Exception::getMessage reads it.
Direct property access (`$obj->prop`) is unaffected — only the
`zval_get_string + RETURN_STR` pattern used by Exception's final C
methods triggers the orphaned refcount.

Adds a regression test (marked `#[ignore]` so CI stays green) and
documentation on the `#[php(prop)]` attribute with two workarounds:
either rename the shadow field, or mirror to the parent's real slot via
`zend_update_property_stringl`. Proper fix needs either an upstream PHP
patch or a deeper change to how field props store their value.

8653 of 13065 relevant lines covered (66.23%)

33.38 hits per line

Relevant lines Covered
Build:
Build:
13065 RELEVANT LINES 8653 COVERED LINES
33.38 HITS PER LINE
Source Files on feat/cache-slot-property-lookup
  • Tree
  • List 96
  • Changed 0
  • Source Changed 0
  • Coverage Changed 0
Coverage ∆ File Lines Relevant Covered Missed Hits/Line

Recent builds

Builds Branch Commit Type Ran Committer Via Coverage
25812954678 fix/string-prop-getter-zend-string-leak docs(prop): document the Exception::getMessage refcount leak Hit this while building a PHPStan rule on top of biscuit-php and noticing memory growing on every datalog parse error. Tracking it down: any `#[php(prop)]` field holding an owned refcou... push 13 May 2026 04:45PM UTC ptondereau github
66.23
24792373762 fix/729-binary-interned-heap-corruption fix: heap corruption when returning Binary of 0/1 packed bytes Returning a Binary from a #[php_function] crashed PHP with "zend_mm_heap corrupted" when the packed byte length was 0 or 1. This was a regression introduced in 0.15.8 by PR #701, whic... push 22 Apr 2026 05:24PM UTC ptondereau github
66.24
24656689045 fix/clippy-1-95-0 chore(nix): bump flake inputs to pick up rust 1.95.0 Aligns the devshell toolchain with CI stable (1.95.0) so local `cargo clippy` surfaces the same lints the workflow enforces. - nixpkgs: 46db2e09 -> 4bd9165a - rust-overlay: 75900435 -> 25d75be8 push 20 Apr 2026 08:39AM UTC ptondereau github
65.9
24656544441 fix/clippy-1-95-0 fix: address clippy 1.95.0 lint errors - drop trailing comma in `panic!` (unnecessary_trailing_comma) - remove redundant `as u32` casts on already-`u32` expressions in `exception_observer` (unnecessary_cast) - collapse nested `if` into match ar... push 20 Apr 2026 08:36AM UTC ptondereau github
65.9
24423222637 feat/cache-slot-property-lookup perf: cache property lookups across repeated accesses When PHP reads or writes an object property (e.g. `$obj->name`), ext-php-rs previously searched through all registered properties by name on every single access. In a loop hitting the same pro... push 14 Apr 2026 09:17PM UTC ptondereau github
66.09
24395155140 feat/static-property-descriptors feat: use static function pointers for class properties instead of heap allocations Previously, each PHP class property required boxing closures (Box<dyn Fn>) and building a HashMap at runtime. This happened once per class but was unnecessary sin... push 14 Apr 2026 10:59AM UTC ptondereau github
66.28
24394866837 feat/static-property-descriptors feat: use static function pointers for class properties instead of heap allocations Previously, each PHP class property required boxing closures (Box<dyn Fn>) and building a HashMap at runtime. This happened once per class but was unnecessary sin... push 14 Apr 2026 10:52AM UTC ptondereau github
66.28
24394807717 feat/static-property-descriptors feat: use static function pointers for class properties instead of heap allocations Previously, each PHP class property required boxing closures (Box<dyn Fn>) and building a HashMap at runtime. This happened once per class but was unnecessary sin... push 14 Apr 2026 10:50AM UTC ptondereau github
66.28
24394367537 feat/static-property-descriptors feat: use static function pointers for class properties instead of heap allocations Previously, each PHP class property required boxing closures (Box<dyn Fn>) and building a HashMap at runtime. This happened once per class but was unnecessary sin... push 14 Apr 2026 10:40AM UTC ptondereau github
66.27
23946026804 feat/module-globals feat(zend): add ModuleGlobals for per-extension global state Add `ModuleGlobal` trait and `ModuleGlobals<T>` struct that integrate with PHP's TSRM to provide per-extension module globals. In ZTS builds, PHP allocates per-thread storage via `ts_al... push 03 Apr 2026 12:27PM UTC ptondereau github
65.85
See All Builds (18)

Badge your Repo: ext-php-rs

We detected this repo isn’t badged! Grab the embed code to the right, add it to your repo to show off your code coverage, and when the badge is live hit the refresh button to remove this message.

Could not find badge in README.

Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

Refresh
  • Settings
  • Repo on GitHub
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc