diff options
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | ext/pcre/php_pcre.c | 2 | ||||
-rw-r--r-- | ext/pcre/tests/bug72688.phpt | 17 |
3 files changed, 20 insertions, 1 deletions
@@ -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" |