1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 04:27:44 +00:00

LibJS: Handle OOM errors in the GetSubstitution AO

This commit is contained in:
Timothy Flynn 2023-01-08 09:11:31 -05:00 committed by Linus Groh
parent 5b7dfe848d
commit 57b918807e

View file

@ -1239,27 +1239,27 @@ ThrowCompletionOr<DeprecatedString> get_substitution(VM& vm, Utf16View const& ma
u16 curr = replace_view.code_unit_at(i); u16 curr = replace_view.code_unit_at(i);
if ((curr != '$') || (i + 1 >= replace_view.length_in_code_units())) { if ((curr != '$') || (i + 1 >= replace_view.length_in_code_units())) {
result.append(curr); TRY_OR_THROW_OOM(vm, result.try_append(curr));
continue; continue;
} }
u16 next = replace_view.code_unit_at(i + 1); u16 next = replace_view.code_unit_at(i + 1);
if (next == '$') { if (next == '$') {
result.append('$'); TRY_OR_THROW_OOM(vm, result.try_append('$'));
++i; ++i;
} else if (next == '&') { } else if (next == '&') {
result.append(matched.data(), matched.length_in_code_units()); TRY_OR_THROW_OOM(vm, result.try_append(matched.data(), matched.length_in_code_units()));
++i; ++i;
} else if (next == '`') { } else if (next == '`') {
auto substring = str.substring_view(0, position); auto substring = str.substring_view(0, position);
result.append(substring.data(), substring.length_in_code_units()); TRY_OR_THROW_OOM(vm, result.try_append(substring.data(), substring.length_in_code_units()));
++i; ++i;
} else if (next == '\'') { } else if (next == '\'') {
auto tail_pos = position + matched.length_in_code_units(); auto tail_pos = position + matched.length_in_code_units();
if (tail_pos < str.length_in_code_units()) { if (tail_pos < str.length_in_code_units()) {
auto substring = str.substring_view(tail_pos); auto substring = str.substring_view(tail_pos);
result.append(substring.data(), substring.length_in_code_units()); TRY_OR_THROW_OOM(vm, result.try_append(substring.data(), substring.length_in_code_units()));
} }
++i; ++i;
} else if (is_ascii_digit(next)) { } else if (is_ascii_digit(next)) {
@ -1273,12 +1273,12 @@ ThrowCompletionOr<DeprecatedString> get_substitution(VM& vm, Utf16View const& ma
if (!value.is_undefined()) { if (!value.is_undefined()) {
auto value_string = TRY(value.to_utf16_string(vm)); auto value_string = TRY(value.to_utf16_string(vm));
result.append(value_string.view().data(), value_string.length_in_code_units()); TRY_OR_THROW_OOM(vm, result.try_append(value_string.view().data(), value_string.length_in_code_units()));
} }
i += is_two_digits ? 2 : 1; i += is_two_digits ? 2 : 1;
} else { } else {
result.append(curr); TRY_OR_THROW_OOM(vm, result.try_append(curr));
} }
} else if (next == '<') { } else if (next == '<') {
auto start_position = i + 2; auto start_position = i + 2;
@ -1292,7 +1292,7 @@ ThrowCompletionOr<DeprecatedString> get_substitution(VM& vm, Utf16View const& ma
} }
if (named_captures.is_undefined() || !end_position.has_value()) { if (named_captures.is_undefined() || !end_position.has_value()) {
result.append(curr); TRY_OR_THROW_OOM(vm, result.try_append(curr));
} else { } else {
auto group_name_view = replace_view.substring_view(start_position, *end_position - start_position); auto group_name_view = replace_view.substring_view(start_position, *end_position - start_position);
auto group_name = TRY_OR_THROW_OOM(vm, group_name_view.to_utf8(Utf16View::AllowInvalidCodeUnits::Yes)); auto group_name = TRY_OR_THROW_OOM(vm, group_name_view.to_utf8(Utf16View::AllowInvalidCodeUnits::Yes));
@ -1301,13 +1301,13 @@ ThrowCompletionOr<DeprecatedString> get_substitution(VM& vm, Utf16View const& ma
if (!capture.is_undefined()) { if (!capture.is_undefined()) {
auto capture_string = TRY(capture.to_utf16_string(vm)); auto capture_string = TRY(capture.to_utf16_string(vm));
result.append(capture_string.view().data(), capture_string.length_in_code_units()); TRY_OR_THROW_OOM(vm, result.try_append(capture_string.view().data(), capture_string.length_in_code_units()));
} }
i = *end_position; i = *end_position;
} }
} else { } else {
result.append(curr); TRY_OR_THROW_OOM(vm, result.try_append(curr));
} }
} }