diff options
author | Nuno Lopes <nlopess@php.net> | 2009-04-10 15:47:15 +0000 |
---|---|---|
committer | Nuno Lopes <nlopess@php.net> | 2009-04-10 15:47:15 +0000 |
commit | ae57857ebac7ced6e8ec985e916ed2bbc8c27eb4 (patch) | |
tree | 6e5ed82289c05a9e84ae37e94bed146539933218 | |
parent | c1ccccc658554c4e0c83a26165cb3802b4f75950 (diff) | |
download | php-git-ae57857ebac7ced6e8ec985e916ed2bbc8c27eb4.tar.gz |
fix bug #47662: support more than 127 named subpatterns
-rw-r--r-- | ext/pcre/php_pcre.c | 2 | ||||
-rw-r--r-- | ext/pcre/tests/bug47662.phpt | 18 |
2 files changed, 19 insertions, 1 deletions
diff --git a/ext/pcre/php_pcre.c b/ext/pcre/php_pcre.c index 496418a72e..7d414a3858 100644 --- a/ext/pcre/php_pcre.c +++ b/ext/pcre/php_pcre.c @@ -209,7 +209,7 @@ static char **make_subpats_table(int num_subpats, pcre_cache_entry *pce TSRMLS_D } while (ni++ < name_cnt) { - name_idx = 0xff * name_table[0] + name_table[1]; + name_idx = 0xff * (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/bug47662.phpt b/ext/pcre/tests/bug47662.phpt new file mode 100644 index 0000000000..d6056746cb --- /dev/null +++ b/ext/pcre/tests/bug47662.phpt @@ -0,0 +1,18 @@ +--TEST-- +Bug #47662 (support more than 127 named subpatterns) +--FILE-- +<?php + +$regex = '@'; +for($bar=0; $bar<1027; $bar++) { + $regex .= '((?P<x'.$bar.'>))'; +} +$regex .= 'fo+bar@'; + +var_dump(preg_match($regex, 'foobar')); +echo "Done!\n"; + +?> +--EXPECT-- +int(1) +Done! |