File tree 3 files changed +28
-4
lines changed
3 files changed +28
-4
lines changed Original file line number Diff line number Diff line change 5
5
- MySQLi:
6
6
. Fixed bug #81494 (Stopped unbuffered query does not throw error). (Nikita)
7
7
8
+ - PCRE:
9
+ . Fixed bug #81424 (PCRE2 10.35 JIT performance regression). (cmb)
10
+
8
11
- Streams:
9
12
. Fixed bug #54340 (Memory corruption with user_filter). (Nikita)
10
13
Original file line number Diff line number Diff line change @@ -1249,10 +1249,13 @@ SLJIT_ASSERT(*cc == OP_ONCE || *cc == OP_BRA || *cc == OP_CBRA);
1249
1249
SLJIT_ASSERT (* cc != OP_CBRA || common -> optimized_cbracket [GET2 (cc , 1 + LINK_SIZE )] != 0 );
1250
1250
SLJIT_ASSERT (start < EARLY_FAIL_ENHANCE_MAX );
1251
1251
1252
+ next_alt = cc + GET (cc , 1 );
1253
+ if (* next_alt == OP_ALT )
1254
+ fast_forward_allowed = FALSE;
1255
+
1252
1256
do
1253
1257
{
1254
1258
count = start ;
1255
- next_alt = cc + GET (cc , 1 );
1256
1259
cc += 1 + LINK_SIZE + ((* cc == OP_CBRA ) ? IMM2_SIZE : 0 );
1257
1260
1258
1261
while (TRUE)
1521
1524
{
1522
1525
count ++ ;
1523
1526
1524
- if (fast_forward_allowed && * next_alt == OP_KET )
1527
+ if (fast_forward_allowed )
1525
1528
{
1526
1529
common -> fast_forward_bc_ptr = accelerated_start ;
1527
1530
common -> private_data_ptrs [(accelerated_start + 1 ) - common -> start ] = ((* private_data_start ) << 3 ) | type_skip ;
1569
1572
else if (result < count )
1570
1573
result = count ;
1571
1574
1572
- fast_forward_allowed = FALSE;
1573
1575
cc = next_alt ;
1576
+ next_alt = cc + GET (cc , 1 );
1574
1577
}
1575
1578
while (* cc == OP_ALT );
1576
1579
@@ -11152,7 +11155,7 @@ early_fail_type = (early_fail_ptr & 0x7);
11152
11155
early_fail_ptr >>= 3 ;
11153
11156
11154
11157
/* During recursion, these optimizations are disabled. */
11155
- if (common -> early_fail_start_ptr == 0 )
11158
+ if (common -> early_fail_start_ptr == 0 && common -> fast_forward_bc_ptr == NULL )
11156
11159
{
11157
11160
early_fail_ptr = 0 ;
11158
11161
early_fail_type = type_skip ;
Original file line number Diff line number Diff line change
1
+ --TEST--
2
+ Bug #81424 (PCRE2 10.35 JIT performance regression)
3
+ --DESCRIPTION--
4
+ We're testing against the functional regression which has been introduced by
5
+ fixing the performance regression.
6
+ --FILE--
7
+ <?php
8
+ var_dump (
9
+ preg_match ('/(?P<size>\d+)m|M/ ' , "4M " , $ m ),
10
+ $ m
11
+ );
12
+ ?>
13
+ --EXPECT--
14
+ int(1)
15
+ array(1) {
16
+ [0]=>
17
+ string(1) "M"
18
+ }
You can’t perform that action at this time.
0 commit comments