LibJS: Fix impossible member access for negative integers
The PropertyName class able to match a number or an array can only accept positive numerical values. However, the computed_property_name method sometimes returned negative values. This commit also adds a basic object access test case.
This commit is contained in:
parent
cb18b2c74d
commit
4a9485f830
Notes:
sideshowbarker
2024-07-19 07:50:36 +09:00
Author: https://github.com/Dexesttp 🔰 Commit: https://github.com/SerenityOS/serenity/commit/4a9485f830c Pull-request: https://github.com/SerenityOS/serenity/pull/1672
2 changed files with 18 additions and 1 deletions
|
@ -893,7 +893,7 @@ PropertyName MemberExpression::computed_property_name(Interpreter& interpreter)
|
|||
return {};
|
||||
ASSERT(!index.is_empty());
|
||||
// FIXME: What about non-integer numbers tho.
|
||||
if (index.is_number())
|
||||
if (index.is_number() && index.to_i32() >= 0)
|
||||
return PropertyName(index.to_i32());
|
||||
return PropertyName(index.to_string());
|
||||
}
|
||||
|
|
17
Libraries/LibJS/Tests/object-basic.js
Normal file
17
Libraries/LibJS/Tests/object-basic.js
Normal file
|
@ -0,0 +1,17 @@
|
|||
try {
|
||||
var o = { foo: "bar" };
|
||||
assert(o.foo === "bar");
|
||||
assert(o["foo"] === "bar");
|
||||
o.baz = "test";
|
||||
assert(o.baz === "test");
|
||||
assert(o["baz"] === "test");
|
||||
o[10] = "123";
|
||||
assert(o[10] === "123");
|
||||
assert(o["10"] === "123");
|
||||
o[-1] = "hello friends";
|
||||
assert(o[-1] === "hello friends");
|
||||
assert(o["-1"] === "hello friends");
|
||||
console.log("PASS");
|
||||
} catch (e) {
|
||||
console.log("FAIL: " + e);
|
||||
}
|
Loading…
Add table
Reference in a new issue