Skip to content

Fix GH-21639: Protect frameless implode args#21815

Open
prateekbhujel wants to merge 1 commit intophp:PHP-8.4from
prateekbhujel:prateekbhujel/fix-gh-21639-frameless-volatile-args
Open

Fix GH-21639: Protect frameless implode args#21815
prateekbhujel wants to merge 1 commit intophp:PHP-8.4from
prateekbhujel:prateekbhujel/fix-gh-21639-frameless-volatile-args

Conversation

@prateekbhujel
Copy link
Copy Markdown
Contributor

@prateekbhujel prateekbhujel commented Apr 20, 2026

Fixes #21639

The frameless implode handlers borrow their operand zvals directly. If string conversion re-enters userland and clears the variables used for the separator or pieces, those borrowed values can be released while php_implode() is still using them.

Copy the frameless arguments before parsing them so the one-argument and two-argument handlers keep the same by-value lifetime guarantees as a normal call frame. The regression test covers mutation from an array element, mutation during separator conversion, and the one-argument form.

Tests:

ASAN build: ./configure --disable-all --enable-cli --enable-debug --without-pear --enable-address-sanitizer
run-tests.php -q ext/standard/tests/strings/gh21639.phpt ext/standard/tests/strings/implode_basic.phpt ext/standard/tests/strings/implode_variation.phpt ext/standard/tests/strings/join_basic.phpt

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant