LibJS: Fix PropertyName::from_value() for negative and non-int numbers

It was converting *any* number to an i32 index, which obviously is not
correct for negative ints, doubles, infinity and nan.

Fixes #3712.
This commit is contained in:
Linus Groh 2020-10-07 19:53:30 +01:00 committed by Andreas Kling
parent 44d4423229
commit bc78e4b7da
Notes: sideshowbarker 2024-07-19 01:58:43 +09:00
2 changed files with 16 additions and 4 deletions

View file

@ -42,13 +42,13 @@ public:
static PropertyName from_value(GlobalObject& global_object, Value value)
{
if (value.is_empty())
return {};
if (value.is_symbol())
return &value.as_symbol();
if (value.is_number())
if (value.is_integer() && value.as_i32() >= 0)
return value.as_i32();
if (!value.is_empty())
return value.to_string(global_object);
return {};
return value.to_string(global_object);
}
PropertyName() { }

View file

@ -0,0 +1,12 @@
test("Issue #3712, negative/non-int computed property in object expression", () => {
const o = {
[1.23]: "foo",
[-1]: "foo",
[NaN]: "foo",
[Infinity]: "foo",
};
expect(o[1.23]).toBe("foo");
expect(o[-1]).toBe("foo");
expect(o[NaN]).toBe("foo");
expect(o[Infinity]).toBe("foo");
});