mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 11:07:45 +00:00
LibJS: Fix toFixed throwing on undefined, null and NaN fractionDigits
It was checking the original fractionDigits argument was a finite number instead of the coerced fraction_digits.
This commit is contained in:
parent
dfb994f62d
commit
2d26a50d28
2 changed files with 6 additions and 2 deletions
|
@ -65,7 +65,7 @@ JS_DEFINE_NATIVE_FUNCTION(NumberPrototype::to_fixed)
|
||||||
{
|
{
|
||||||
auto number_value = TRY(this_number_value(global_object, vm.this_value(global_object)));
|
auto number_value = TRY(this_number_value(global_object, vm.this_value(global_object)));
|
||||||
auto fraction_digits = TRY(vm.argument(0).to_integer_or_infinity(global_object));
|
auto fraction_digits = TRY(vm.argument(0).to_integer_or_infinity(global_object));
|
||||||
if (!vm.argument(0).is_finite_number())
|
if (!Value(fraction_digits).is_finite_number())
|
||||||
return vm.throw_completion<RangeError>(global_object, ErrorType::InvalidFractionDigits);
|
return vm.throw_completion<RangeError>(global_object, ErrorType::InvalidFractionDigits);
|
||||||
|
|
||||||
if (fraction_digits < 0 || fraction_digits > 100)
|
if (fraction_digits < 0 || fraction_digits > 100)
|
||||||
|
|
|
@ -15,6 +15,10 @@ describe("correct behavior", () => {
|
||||||
// Numbers >= 1e+21
|
// Numbers >= 1e+21
|
||||||
[1e21, 5, "1e+21"],
|
[1e21, 5, "1e+21"],
|
||||||
[1e22, 0, "1e+22"],
|
[1e22, 0, "1e+22"],
|
||||||
|
// undefined, null and NaN are treated as 0 due to toFixed using ToIntegerOrInfinity.
|
||||||
|
[1.1, undefined, "1"],
|
||||||
|
[1.1, null, "1"],
|
||||||
|
[1.1, NaN, "1"],
|
||||||
].forEach(testCase => {
|
].forEach(testCase => {
|
||||||
expect(testCase[0].toFixed(testCase[1])).toBe(testCase[2]);
|
expect(testCase[0].toFixed(testCase[1])).toBe(testCase[2]);
|
||||||
});
|
});
|
||||||
|
@ -37,7 +41,7 @@ describe("errors", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
test("fixed digits RangeError", () => {
|
test("fixed digits RangeError", () => {
|
||||||
[-Infinity, -5, 105, Infinity, NaN].forEach(value => {
|
[-Infinity, -5, 105, Infinity].forEach(value => {
|
||||||
expect(() => (0).toFixed(value)).toThrow(RangeError);
|
expect(() => (0).toFixed(value)).toThrow(RangeError);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue