mirror of
https://github.com/RGBCube/serenity
synced 2025-07-24 21:47:43 +00:00
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:
parent
44d4423229
commit
bc78e4b7da
2 changed files with 16 additions and 4 deletions
|
@ -42,13 +42,13 @@ public:
|
||||||
|
|
||||||
static PropertyName from_value(GlobalObject& global_object, Value value)
|
static PropertyName from_value(GlobalObject& global_object, Value value)
|
||||||
{
|
{
|
||||||
|
if (value.is_empty())
|
||||||
|
return {};
|
||||||
if (value.is_symbol())
|
if (value.is_symbol())
|
||||||
return &value.as_symbol();
|
return &value.as_symbol();
|
||||||
if (value.is_number())
|
if (value.is_integer() && value.as_i32() >= 0)
|
||||||
return value.as_i32();
|
return value.as_i32();
|
||||||
if (!value.is_empty())
|
return value.to_string(global_object);
|
||||||
return value.to_string(global_object);
|
|
||||||
return {};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PropertyName() { }
|
PropertyName() { }
|
||||||
|
|
12
Libraries/LibJS/Tests/object-expression-computed-property.js
Normal file
12
Libraries/LibJS/Tests/object-expression-computed-property.js
Normal 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");
|
||||||
|
});
|
Loading…
Add table
Add a link
Reference in a new issue