Skip to content

Execute stream_filter_append user filters via php_user_filter brigades (#14001) - #14041

Merged
PurHur merged 1 commit into
masterfrom
agent/issue-14001-stream-user-filter-php
Jun 30, 2026
Merged

PurHur merged 1 commit into
masterfrom
agent/issue-14001-stream-user-filter-php

Conversation

@PurHur

@PurHur PurHur commented Jun 30, 2026

Copy link
Copy Markdown
Owner

Summary

  • Implement VM execution for stream_filter_register() + stream_filter_append() user filters (Stdlib: stream_filter_append()/stream_filter_prepend() user filters not supported (LogicException) #14001)
  • VmStreamFilterChain instantiates php_user_filter subclasses, runs filter() with brigades, and applies transformed bytes on read/write
  • Fix brigade bucket sync: stream_bucket_append() now copies mutated data from bucket objects back into brigade storage
  • Add datalen on bucket stdClass objects; use Variable::toObject() in brigade helpers (private $object access)

PHP-in-PHP: all logic in ext/standard/ (VmStreamFilterChain, VmStreamBucket, VmStreamFilters); no new C in runtime/.

Closes #14001

php-src reference

  • ext/standard/streamsfuncs.c — stream_filter_append / stream_filter_prepend
  • main/streams/filter.c — user filter plumbing

Verification

./script/docker-exec.sh -- bash -lc 'source script/php-env.sh
php test/repro/maintainer_gap_stream_user_filter_uppercase.php
php bin/vm.php test/repro/maintainer_gap_stream_user_filter_uppercase.php'

Output (both):

HELLO
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh
vendor/bin/phpunit --filter stream_user_filter_append
vendor/bin/phpunit --filter VmStreamFilterChainTest'
OK (2 tests, 2 assertions)   # stream_user_filter_append VM+JIT
OK (4 tests, 14 assertions)  # VmStreamFilterChainTest

Made with Cursor

Wire stream_filter_append/prepend for user-registered filters through
VmStreamFilterChain: instantiate filters, run filter() with brigades,
and sync bucket object mutations back into brigade storage. Adds datalen
on bucket objects and fixes Variable::toObject() access in brigade helpers.

Co-authored-by: Cursor <cursoragent@cursor.com>
@PurHur
PurHur merged commit 54475df into master Jun 30, 2026
@PurHur
PurHur deleted the agent/issue-14001-stream-user-filter-php branch June 30, 2026 12:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Stdlib: stream_filter_append()/stream_filter_prepend() user filters not supported (LogicException)

1 participant