@@ -1412,9 +1412,10 @@ ecma_regexp_exec_helper (ecma_value_t regexp_value, /**< RegExp object */
14121412 re_set_result_array_properties (result_array_obj_p, input_str_p, re_ctx.num_of_captures / 2 , index);
14131413 ecma_deref_ecma_string (input_str_p);
14141414
1415- for (uint32_t i = 0 ; i < re_ctx.num_of_captures ; i += 2 )
1415+ for (uint32_t i = 0 ; ecma_is_completion_value_empty (ret_value) && i < re_ctx.num_of_captures ; i += 2 )
14161416 {
14171417 ecma_string_t *index_str_p = ecma_new_ecma_string_from_uint32 (i / 2 );
1418+ ecma_value_t capture_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED);
14181419
14191420 if (((re_ctx.saved_p [i] && re_ctx.saved_p [i + 1 ])
14201421 && re_ctx.saved_p [i + 1 ] >= re_ctx.saved_p [i]))
@@ -1431,19 +1432,30 @@ ecma_regexp_exec_helper (ecma_value_t regexp_value, /**< RegExp object */
14311432 {
14321433 capture_str_p = ecma_get_magic_string (LIT_MAGIC_STRING__EMPTY);
14331434 }
1434- ecma_op_object_put (result_array_obj_p, index_str_p, ecma_make_string_value (capture_str_p), true );
1435- ecma_deref_ecma_string (capture_str_p);
1436- }
1437- else
1438- {
1439- ecma_op_object_put (result_array_obj_p,
1440- index_str_p,
1441- ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED),
1442- true );
1435+
1436+ capture_value = ecma_make_string_value (capture_str_p);
14431437 }
1438+
1439+ ECMA_TRY_CATCH (put_value,
1440+ ecma_op_object_put (result_array_obj_p,
1441+ index_str_p,
1442+ capture_value,
1443+ true ),
1444+ ret_value);
1445+ ECMA_FINALIZE (put_value);
1446+
1447+ ecma_free_value (capture_value, true );
14441448 ecma_deref_ecma_string (index_str_p);
14451449 }
1446- ret_value = result_array;
1450+
1451+ if (ecma_is_completion_value_empty (ret_value))
1452+ {
1453+ ret_value = result_array;
1454+ }
1455+ else
1456+ {
1457+ ecma_deref_object (result_array_obj_p);
1458+ }
14471459 }
14481460 else
14491461 {
0 commit comments