Bug #73948 [Asn]: Preg_match_all should return NULLs on trailing optional capture groups.

From: Date: Tue, 19 Mar 2019 14:39:02 +0000
Subject: Bug #73948 [Asn]: Preg_match_all should return NULLs on trailing optional capture groups.
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-220077@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=73948&edit=1 ID: 73948 Updated by: nikic@php.net Reported by: tomasyorke at hotmail dot com Summary: Preg_match_all should return NULLs on trailing optional capture groups. Status: Assigned Type: Bug Package: PCRE related Operating System: Windows 7 PHP Version: 7.0.14 Assigned To: nikic Block user comment: N Private report: N New Comment: > But I found a nearly identical bug with the PREG_OFFSET_CAPTURE flag. Fixed this issue with https://github.com/php/php-src/commit/f53e7394eb61085c09928b47f84123bd90b64dfb on the PHP 7.4 branch. Previous Comments: ------------------------------------------------------------------------ [2019-03-19 13:04:46] nikic@php.net PR for PHP 7.4: https://github.com/php/php-src/pull/3964 ------------------------------------------------------------------------ [2018-06-09 22:51:16] php at tecnopolis dot ca For those stuck on older PHP's, I'm wondering if the following is sufficient to work around this bug? $pattern.='(.??)'; preg_match($pattern,$haystack,$matches); array_pop($matches); I can't yet find any instance where the fairly innocuous (.??) could possibly cause a problem, it should match in all cases, when there's chars left or not, and being non-greedy will not eat earlier matches' chars. ------------------------------------------------------------------------ [2018-04-14 15:08:34] nikic@php.net @requinix: That's impossible for BC reasons. I agree with @cmb that this should only be done for PREG_UNMATCHED_AS_NULL. ------------------------------------------------------------------------ [2018-04-14 14:47:18] requinix@php.net The filling should happen with or without PREG_UNMATCHED_AS_NULL. What it should control whether the filler is NULLs or empty strings. ------------------------------------------------------------------------ [2018-04-14 14:42:46] cmb@php.net Since we now have PREG_UNMATCHED_AS_NULL, the solution appears to be straight forward: fill up NULL values at the end, only if PREG_UNMATCHED_AS_NULL is used. Since this option is only available as of PHP 7.2.0, the resulting BC break seems to be acceptable. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=73948 -- Edit this bug report at https://bugs.php.net/bug.php?id=73948&edit=1

« previous php.bugs (#220077) next »