From 92a7fd77f4244a692da293b1030c2d00db2224b4 Mon Sep 17 00:00:00 2001 From: Shannon Booth Date: Sun, 18 Feb 2024 18:28:16 +1300 Subject: [PATCH] LibJS: Crash on allocation failure in DurationPrototype The String::from_utf8 calls here are also guaranteed to be given a valid UTF-8 string. --- .../LibJS/Runtime/Temporal/DurationPrototype.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Userland/Libraries/LibJS/Runtime/Temporal/DurationPrototype.cpp b/Userland/Libraries/LibJS/Runtime/Temporal/DurationPrototype.cpp index 969e8c7fff..f3693c7485 100644 --- a/Userland/Libraries/LibJS/Runtime/Temporal/DurationPrototype.cpp +++ b/Userland/Libraries/LibJS/Runtime/Temporal/DurationPrototype.cpp @@ -389,12 +389,12 @@ JS_DEFINE_NATIVE_FUNCTION(DurationPrototype::round) largest_unit_present = false; // b. Set largestUnit to defaultLargestUnit. - largest_unit = TRY_OR_THROW_OOM(vm, String::from_utf8(default_largest_unit)); + largest_unit = MUST(String::from_utf8(default_largest_unit)); } // 14. Else if largestUnit is "auto", then else if (*largest_unit == "auto"sv) { // a. Set largestUnit to defaultLargestUnit. - largest_unit = TRY_OR_THROW_OOM(vm, String::from_utf8(default_largest_unit)); + largest_unit = MUST(String::from_utf8(default_largest_unit)); } // 15. If smallestUnitPresent is false and largestUnitPresent is false, then @@ -533,7 +533,7 @@ JS_DEFINE_NATIVE_FUNCTION(DurationPrototype::to_string) auto result = TRY(round_duration(vm, duration->years(), duration->months(), duration->weeks(), duration->days(), duration->hours(), duration->minutes(), duration->seconds(), duration->milliseconds(), duration->microseconds(), duration->nanoseconds(), precision.increment, precision.unit, rounding_mode)).duration_record; // 8. Return ! TemporalDurationToString(result.[[Years]], result.[[Months]], result.[[Weeks]], result.[[Days]], result.[[Hours]], result.[[Minutes]], result.[[Seconds]], result.[[Milliseconds]], result.[[Microseconds]], result.[[Nanoseconds]], precision.[[Precision]]). - return PrimitiveString::create(vm, MUST_OR_THROW_OOM(temporal_duration_to_string(vm, result.years, result.months, result.weeks, result.days, result.hours, result.minutes, result.seconds, result.milliseconds, result.microseconds, result.nanoseconds, precision.precision))); + return PrimitiveString::create(vm, MUST(temporal_duration_to_string(vm, result.years, result.months, result.weeks, result.days, result.hours, result.minutes, result.seconds, result.milliseconds, result.microseconds, result.nanoseconds, precision.precision))); } // 7.3.23 Temporal.Duration.prototype.toJSON ( ), https://tc39.es/proposal-temporal/#sec-temporal.duration.prototype.tojson @@ -544,7 +544,7 @@ JS_DEFINE_NATIVE_FUNCTION(DurationPrototype::to_json) auto duration = TRY(typed_this_object(vm)); // 3. Return ! TemporalDurationToString(duration.[[Years]], duration.[[Months]], duration.[[Weeks]], duration.[[Days]], duration.[[Hours]], duration.[[Minutes]], duration.[[Seconds]], duration.[[Milliseconds]], duration.[[Microseconds]], duration.[[Nanoseconds]], "auto"). - return PrimitiveString::create(vm, MUST_OR_THROW_OOM(temporal_duration_to_string(vm, duration->years(), duration->months(), duration->weeks(), duration->days(), duration->hours(), duration->minutes(), duration->seconds(), duration->milliseconds(), duration->microseconds(), duration->nanoseconds(), "auto"sv))); + return PrimitiveString::create(vm, MUST(temporal_duration_to_string(vm, duration->years(), duration->months(), duration->weeks(), duration->days(), duration->hours(), duration->minutes(), duration->seconds(), duration->milliseconds(), duration->microseconds(), duration->nanoseconds(), "auto"sv))); } // 7.3.24 Temporal.Duration.prototype.toLocaleString ( [ locales [ , options ] ] ), https://tc39.es/proposal-temporal/#sec-temporal.duration.prototype.tolocalestring @@ -556,7 +556,7 @@ JS_DEFINE_NATIVE_FUNCTION(DurationPrototype::to_locale_string) auto duration = TRY(typed_this_object(vm)); // 3. Return ! TemporalDurationToString(duration.[[Years]], duration.[[Months]], duration.[[Weeks]], duration.[[Days]], duration.[[Hours]], duration.[[Minutes]], duration.[[Seconds]], duration.[[Milliseconds]], duration.[[Microseconds]], duration.[[Nanoseconds]], "auto"). - return PrimitiveString::create(vm, MUST_OR_THROW_OOM(temporal_duration_to_string(vm, duration->years(), duration->months(), duration->weeks(), duration->days(), duration->hours(), duration->minutes(), duration->seconds(), duration->milliseconds(), duration->microseconds(), duration->nanoseconds(), "auto"sv))); + return PrimitiveString::create(vm, MUST(temporal_duration_to_string(vm, duration->years(), duration->months(), duration->weeks(), duration->days(), duration->hours(), duration->minutes(), duration->seconds(), duration->milliseconds(), duration->microseconds(), duration->nanoseconds(), "auto"sv))); } // 7.3.25 Temporal.Duration.prototype.valueOf ( ), https://tc39.es/proposal-temporal/#sec-temporal.duration.prototype.valueof