mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Fix #79846: 8c67c16699
broke simple regexp
We backport the respective upstream fix[1]. [1] <https://vcs.pcre.org/pcre2?view=revision&revision=1267>
This commit is contained in:
parent
03a98d9420
commit
4659c12ae0
2 changed files with 29 additions and 12 deletions
|
@ -1466,9 +1466,9 @@ do
|
||||||
default:
|
default:
|
||||||
accelerated_start = NULL;
|
accelerated_start = NULL;
|
||||||
fast_forward_allowed = FALSE;
|
fast_forward_allowed = FALSE;
|
||||||
break;
|
|
||||||
}
|
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case OP_ONCE:
|
case OP_ONCE:
|
||||||
case OP_BRA:
|
case OP_BRA:
|
||||||
|
@ -1834,57 +1834,57 @@ while (cc < ccend)
|
||||||
case OP_BRAZERO:
|
case OP_BRAZERO:
|
||||||
case OP_BRAMINZERO:
|
case OP_BRAMINZERO:
|
||||||
case OP_BRAPOSZERO:
|
case OP_BRAPOSZERO:
|
||||||
repeat_check = FALSE;
|
|
||||||
size = 1;
|
size = 1;
|
||||||
|
repeat_check = FALSE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
CASE_ITERATOR_PRIVATE_DATA_1
|
CASE_ITERATOR_PRIVATE_DATA_1
|
||||||
space = 1;
|
|
||||||
size = -2;
|
size = -2;
|
||||||
|
space = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
CASE_ITERATOR_PRIVATE_DATA_2A
|
CASE_ITERATOR_PRIVATE_DATA_2A
|
||||||
space = 2;
|
|
||||||
size = -2;
|
size = -2;
|
||||||
|
space = 2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
CASE_ITERATOR_PRIVATE_DATA_2B
|
CASE_ITERATOR_PRIVATE_DATA_2B
|
||||||
space = 2;
|
|
||||||
size = -(2 + IMM2_SIZE);
|
size = -(2 + IMM2_SIZE);
|
||||||
|
space = 2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
CASE_ITERATOR_TYPE_PRIVATE_DATA_1
|
CASE_ITERATOR_TYPE_PRIVATE_DATA_1
|
||||||
space = 1;
|
|
||||||
size = 1;
|
size = 1;
|
||||||
|
space = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
CASE_ITERATOR_TYPE_PRIVATE_DATA_2A
|
CASE_ITERATOR_TYPE_PRIVATE_DATA_2A
|
||||||
|
size = 1;
|
||||||
if (cc[1] != OP_ANYNL && cc[1] != OP_EXTUNI)
|
if (cc[1] != OP_ANYNL && cc[1] != OP_EXTUNI)
|
||||||
space = 2;
|
space = 2;
|
||||||
size = 1;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OP_TYPEUPTO:
|
case OP_TYPEUPTO:
|
||||||
|
size = 1 + IMM2_SIZE;
|
||||||
if (cc[1 + IMM2_SIZE] != OP_ANYNL && cc[1 + IMM2_SIZE] != OP_EXTUNI)
|
if (cc[1 + IMM2_SIZE] != OP_ANYNL && cc[1 + IMM2_SIZE] != OP_EXTUNI)
|
||||||
space = 2;
|
space = 2;
|
||||||
size = 1 + IMM2_SIZE;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OP_TYPEMINUPTO:
|
case OP_TYPEMINUPTO:
|
||||||
space = 2;
|
|
||||||
size = 1 + IMM2_SIZE;
|
size = 1 + IMM2_SIZE;
|
||||||
|
space = 2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OP_CLASS:
|
case OP_CLASS:
|
||||||
case OP_NCLASS:
|
case OP_NCLASS:
|
||||||
space = get_class_iterator_size(cc + size);
|
|
||||||
size = 1 + 32 / sizeof(PCRE2_UCHAR);
|
size = 1 + 32 / sizeof(PCRE2_UCHAR);
|
||||||
|
space = get_class_iterator_size(cc + size);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH != 8
|
#if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH != 8
|
||||||
case OP_XCLASS:
|
case OP_XCLASS:
|
||||||
space = get_class_iterator_size(cc + size);
|
|
||||||
size = GET(cc, 1);
|
size = GET(cc, 1);
|
||||||
|
space = get_class_iterator_size(cc + size);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
17
ext/pcre/tests/bug79846.phpt
Normal file
17
ext/pcre/tests/bug79846.phpt
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
--TEST--
|
||||||
|
Bug #79846 (8c67c166996 broke simple regexp)
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
$item = "component_phase_1";
|
||||||
|
preg_match("/([a-z]+_[a-z]+_*[a-z]+)_?(\d+)?/", $item, $match);
|
||||||
|
var_dump($match);
|
||||||
|
?>
|
||||||
|
--EXPECT--
|
||||||
|
array(3) {
|
||||||
|
[0]=>
|
||||||
|
string(17) "component_phase_1"
|
||||||
|
[1]=>
|
||||||
|
string(15) "component_phase"
|
||||||
|
[2]=>
|
||||||
|
string(1) "1"
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue