preg_split() swallows part of the string
| Bug #42945 | preg_split() swallows part of the string | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Submitted: | 2007-10-12 12:04 UTC | Modified: | 2008-01-13 14:44 UTC |
|
||||||||||
| From: | Arne dot Heizmann at csr dot com | Assigned: | ||||||||||||
| Status: | Closed | Package: | PCRE related | |||||||||||
| PHP Version: | 5CVS-2007-10-22 | OS: | * | |||||||||||
| Private report: | No | CVE-ID: | None | |||||||||||
[2007-10-12 12:04 UTC] Arne dot Heizmann at csr dot com
Description: ------------ The following example code shows how preg_split() - when used with PREG_SPLIT_NO_EMPTY - omits pieces which aren't empty. The returned array SHOULD contain ALL of the characters from the original string minus the characters that match the separator. In my example, the separator is a zero-width match. I notice that this problem was reported as Bug #15413 before and marked "Bogus". My example shows that the bug is real. Reproduce code: --------------- <? header ('Content-type: text/plain'); var_export (preg_split ('/\b/', 'a\'', -1, PREG_SPLIT_NO_EMPTY)); ?> Expected result: ---------------- array ( 0 => 'a', 1 => '\'', ) Actual result: -------------- array ( 0 => 'a', )
Patches
Pull Requests
History
AllCommentsChangesGit/SVN commits
[2007-10-22 08:52 UTC] jani@php.net
[2008-01-12 02:16 UTC] felipe@php.net
I tested in PHP 5.3 Index: php_pcre.c =================================================================== RCS file: /repository/php-src/ext/pcre/php_pcre.c,v retrieving revision 1.168.2.9.2.21.2.8 diff -u -r1.168.2.9.2.21.2.8 php_pcre.c --- php_pcre.c 31 Dec 2007 07:17:11 -0000 1.168.2.9.2.21.2.8 +++ php_pcre.c 12 Jan 2008 02:14:13 -0000 @@ -1562,7 +1562,7 @@ } - if (!no_empty || start_offset != subject_len) + if (!no_empty || last_match[0] != '\0') { if (offset_capture) { /* Add the last (match, offset) pair to the return value */[2008-01-13 14:44 UTC] nlopess@php.net