@@ -1330,7 +1330,8 @@ njs_int_t
1330
1330
njs_regexp_prototype_symbol_replace (njs_vm_t * vm , njs_value_t * args ,
1331
1331
njs_uint_t nargs , njs_index_t unused , njs_value_t * retval )
1332
1332
{
1333
- int64_t n , last_index , ncaptures , pos , next_pos , length ;
1333
+ int64_t n , last_index , ncaptures , pos , length ;
1334
+ const u_char * p , * next ;
1334
1335
njs_str_t rep , m ;
1335
1336
njs_int_t ret ;
1336
1337
njs_arr_t results ;
@@ -1461,8 +1462,8 @@ njs_regexp_prototype_symbol_replace(njs_vm_t *vm, njs_value_t *args,
1461
1462
}
1462
1463
1463
1464
i = 0 ;
1464
- pos = 0 ;
1465
- next_pos = 0 ;
1465
+ p = s . start ;
1466
+ next = p ;
1466
1467
1467
1468
while (i < results .items ) {
1468
1469
r = njs_arr_item (& results , i ++ );
@@ -1491,13 +1492,7 @@ njs_regexp_prototype_symbol_replace(njs_vm_t *vm, njs_value_t *args,
1491
1492
goto exception ;
1492
1493
}
1493
1494
1494
- if ((size_t ) length != s .size ) {
1495
- /* UTF-8 string. */
1496
- pos = njs_string_utf8_offset (s .start , s .start + s .size , pos )
1497
- - s .start ;
1498
- }
1499
-
1500
- pos = njs_max (njs_min (pos , (int64_t ) s .size ), 0 );
1495
+ pos = njs_max (njs_min (pos , (int64_t ) length ), 0 );
1501
1496
1502
1497
ret = njs_object_length (vm , r , & ncaptures );
1503
1498
if (njs_slow_path (ret != NJS_OK )) {
@@ -1578,15 +1573,17 @@ njs_regexp_prototype_symbol_replace(njs_vm_t *vm, njs_value_t *args,
1578
1573
goto exception ;
1579
1574
}
1580
1575
1581
- if (pos >= next_pos ) {
1582
- njs_chb_append (& chain , & s .start [next_pos ], pos - next_pos );
1576
+ p = njs_string_offset (& s , pos );
1577
+
1578
+ if (p >= next ) {
1579
+ njs_chb_append (& chain , next , p - next );
1583
1580
1584
1581
njs_string_get (retval , & rep );
1585
1582
njs_chb_append_str (& chain , & rep );
1586
1583
1587
1584
njs_string_get (& matched , & m );
1588
1585
1589
- next_pos = pos + ( int64_t ) m .length ;
1586
+ next = p + m .length ;
1590
1587
}
1591
1588
1592
1589
if (!func_replace && njs_object_slots (r )) {
@@ -1599,8 +1596,8 @@ njs_regexp_prototype_symbol_replace(njs_vm_t *vm, njs_value_t *args,
1599
1596
}
1600
1597
}
1601
1598
1602
- if (next_pos < ( int64_t ) s .size ) {
1603
- njs_chb_append (& chain , & s .start [ next_pos ], s .size - next_pos );
1599
+ if (next < s . start + s .size ) {
1600
+ njs_chb_append (& chain , next , s .start + s .size - next );
1604
1601
}
1605
1602
1606
1603
ret = njs_string_create_chb (vm , retval , & chain );
0 commit comments