Skip to content
Permalink
Browse files

Respect OFFSET_CAPTURE when padding preg_match_all() results

This issue was mentioned in bug #73948. The PREG_PATTERN_ORDER
padding was performed without respecting the PREF_OFFSET_CAPTURE
flag, which resulted in unmatched subpatterns being either null or
[null, -1] depending on where they occur. Now they will always be
[null, -1], consistent with other usages.
  • Loading branch information
nikic committed Mar 19, 2019
1 parent 2783670 commit f53e7394eb61085c09928b47f84123bd90b64dfb
Showing with 80 additions and 16 deletions.
  1. +5 −1 ext/pcre/php_pcre.c
  2. +25 −5 ext/pcre/tests/bug61780_1.phpt
  3. +50 −10 ext/pcre/tests/bug61780_2.phpt
@@ -1290,7 +1290,11 @@ PHPAPI void php_pcre_match_impl(pcre_cache_entry *pce, zend_string *subject_str,
*/
if (count < num_subpats) {
for (; i < num_subpats; i++) {
if (unmatched_as_null) {
if (offset_capture) {
add_offset_pair(
&match_sets[i], NULL, 0, PCRE2_UNSET,
NULL, unmatched_as_null);
} else if (unmatched_as_null) {
add_next_index_null(&match_sets[i]);
} else {
add_next_index_str(&match_sets[i], ZSTR_EMPTY_ALLOC());
@@ -95,7 +95,11 @@ array (
),
1 =>
array (
0 => NULL,
0 =>
array (
0 => NULL,
1 => -1,
),
1 =>
array (
0 => NULL,
@@ -106,18 +110,34 @@ array (
0 => '4',
1 => 3,
),
3 => NULL,
3 =>
array (
0 => NULL,
1 => -1,
),
),
2 =>
array (
0 => NULL,
0 =>
array (
0 => NULL,
1 => -1,
),
1 =>
array (
0 => '2',
1 => 1,
),
2 => NULL,
3 => NULL,
2 =>
array (
0 => NULL,
1 => -1,
),
3 =>
array (
0 => NULL,
1 => -1,
),
),
)

@@ -121,7 +121,11 @@ array (
),
'a' =>
array (
0 => NULL,
0 =>
array (
0 => NULL,
1 => -1,
),
1 =>
array (
0 => NULL,
@@ -132,11 +136,19 @@ array (
0 => '4',
1 => 3,
),
3 => NULL,
3 =>
array (
0 => NULL,
1 => -1,
),
),
1 =>
array (
0 => NULL,
0 =>
array (
0 => NULL,
1 => -1,
),
1 =>
array (
0 => NULL,
@@ -147,29 +159,57 @@ array (
0 => '4',
1 => 3,
),
3 => NULL,
3 =>
array (
0 => NULL,
1 => -1,
),
),
'b' =>
array (
0 => NULL,
0 =>
array (
0 => NULL,
1 => -1,
),
1 =>
array (
0 => '2',
1 => 1,
),
2 => NULL,
3 => NULL,
2 =>
array (
0 => NULL,
1 => -1,
),
3 =>
array (
0 => NULL,
1 => -1,
),
),
2 =>
array (
0 => NULL,
0 =>
array (
0 => NULL,
1 => -1,
),
1 =>
array (
0 => '2',
1 => 1,
),
2 => NULL,
3 => NULL,
2 =>
array (
0 => NULL,
1 => -1,
),
3 =>
array (
0 => NULL,
1 => -1,
),
),
)

0 comments on commit f53e739

Please sign in to comment.
You can’t perform that action at this time.