Skip to content

Stdlib: preg_split/preg_grep mask unknown flags like Zend (#27946) - #27972

Merged
PurHur merged 1 commit into
masterfrom
fix/27946-preg-split-grep-unknown-flags
Aug 6, 2026
Merged

Stdlib: preg_split/preg_grep mask unknown flags like Zend (#27946)#27972
PurHur merged 1 commit into
masterfrom
fix/27946-preg-split-grep-unknown-flags

Conversation

@PurHur

@PurHur PurHur commented Aug 6, 2026

Copy link
Copy Markdown
Owner

Summary

  • Remove over-strict LogicException on unknown preg_split / preg_grep flags; match php-src bit-mask behavior.
  • preg_grep: invert via flags & PREG_GREP_INVERT (VM + JIT).
  • preg_split: PREG_SPLIT_DELIM_CAPTURE only emits capturing subgroups (never full match when pattern has no ()), so flags like 999 match Zend [].
  • Keep preg_match bad-flags ValueError.

Closes #27946

Test plan

  • Zend / VM / JIT on test/repro/issue_27946_preg_split_grep_unknown_flags.php — identical
  • vendor/bin/phpunit --filter PregSplitBuiltinTest — OK
  • Compliance .phpt + unit guard

Verification

split:[]
grep:[1]
grep998:{"1":"a"}
match:ValueError:preg_match(): Argument #4 ($flags) must be a PREG_* constant

Made with Cursor

Drop LogicException guards; mask PREG_GREP_INVERT; DELIM_CAPTURE only emits capturing subgroups.

Co-authored-by: Cursor <cursoragent@cursor.com>
@PurHur
PurHur merged commit ffc9059 into master Aug 6, 2026
1 check failed
@PurHur
PurHur deleted the fix/27946-preg-split-grep-unknown-flags branch August 6, 2026 01:40
PurHur added a commit that referenced this pull request Aug 6, 2026
#27972 landed between trust refreshes #27971/#27973, re-staling
lowering_source_fingerprint. Rebuild bin-compile-aot on tip
(7070e1201fdf…, verified-fresh) — no restamp.

Co-authored-by: PurHur <PurHur@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
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: preg_split()/preg_grep() unknown flags LogicException — Zend ignores/accepts (ext/pcre/php_pcre.c)

1 participant