summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS2
-rw-r--r--ext/pcre/php_pcre.c2
-rw-r--r--ext/pcre/tests/bug72688.phpt17
3 files changed, 20 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index bd65b76d6b..204defd4bb 100644
--- a/NEWS
+++ b/NEWS
@@ -42,6 +42,8 @@ PHP NEWS
- Intl:
. Partially fixed #72506 (idn_to_ascii for UTS #46 incorrect for long domain
names). (cmb)
+- PCRE:
+ . Fixed bug #72688 (preg_match missing group names in matches). (cmb)
- PDO_pgsql:
. Fixed bug #70313 (PDO statement fails to throw exception). (Matteo)
diff --git a/ext/pcre/php_pcre.c b/ext/pcre/php_pcre.c
index 6b258b9a20..ddc5d764f9 100644
--- a/ext/pcre/php_pcre.c
+++ b/ext/pcre/php_pcre.c
@@ -215,7 +215,7 @@ static char **make_subpats_table(int num_subpats, pcre_cache_entry *pce TSRMLS_D
}
while (ni++ < name_cnt) {
- name_idx = 0xff * (unsigned char)name_table[0] + (unsigned char)name_table[1];
+ name_idx = 0x100 * (unsigned char)name_table[0] + (unsigned char)name_table[1];
subpat_names[name_idx] = name_table + 2;
if (is_numeric_string(subpat_names[name_idx], strlen(subpat_names[name_idx]), NULL, NULL, 0) > 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Numeric named subpatterns are not allowed");
diff --git a/ext/pcre/tests/bug72688.phpt b/ext/pcre/tests/bug72688.phpt
new file mode 100644
index 0000000000..715743c73d
--- /dev/null
+++ b/ext/pcre/tests/bug72688.phpt
@@ -0,0 +1,17 @@
+--TEST--
+Bug #72688 (preg_match missing group names in matches)
+--FILE--
+<?php
+
+$pattern = [];
+for ($i = 0; $i < 300; $i++) {
+ $pattern[] = "(?'group{$i}'{$i}$)";
+}
+$fullPattern = '/' . implode('|', $pattern) . '/uix';
+
+preg_match($fullPattern, '290', $matches);
+
+var_dump($matches['group290']);
+?>
+--EXPECT--
+string(3) "290"