mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-11 01:06:01 +03:00
LibJS: Make string to integer parsing for properties more strict
This does break two TypedArray test262 test but those really were not correct because hasProperty was not implemented
This commit is contained in:
parent
105e72cdad
commit
f7e2994f35
Notes:
sideshowbarker
2024-07-18 11:39:05 +09:00
Author: https://github.com/davidot Commit: https://github.com/SerenityOS/serenity/commit/f7e2994f35e Pull-request: https://github.com/SerenityOS/serenity/pull/8191
@ -113,6 +113,19 @@ public:
|
||||
bool try_coerce_into_number()
|
||||
{
|
||||
VERIFY(m_string_may_be_number);
|
||||
if (m_string.is_empty()) {
|
||||
m_string_may_be_number = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (char first = m_string.characters()[0]; first < '0' || first > '9') {
|
||||
m_string_may_be_number = false;
|
||||
return false;
|
||||
} else if (m_string.length() > 1 && first == '0') {
|
||||
m_string_may_be_number = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
i32 property_index = m_string.to_int(TrimWhitespace::No).value_or(-1);
|
||||
if (property_index < 0) {
|
||||
m_string_may_be_number = false;
|
||||
|
@ -0,0 +1,49 @@
|
||||
describe("normal behavior", () => {
|
||||
var arr = [3, 4, 5];
|
||||
|
||||
test("basic", () => {
|
||||
expect(arr["0"]).toBe(3);
|
||||
expect(arr["1"]).toBe(4);
|
||||
expect(arr["2"]).toBe(5);
|
||||
});
|
||||
|
||||
test("above length", () => {
|
||||
expect(arr["3"]).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe("strings with extra characters", () => {
|
||||
var arr = [3, 4, 5];
|
||||
|
||||
test("whitespace", () => {
|
||||
expect(arr[" 0"]).toBeUndefined();
|
||||
expect(arr["0 "]).toBeUndefined();
|
||||
expect(arr[" 0"]).toBeUndefined();
|
||||
expect(arr[" 0 "]).toBeUndefined();
|
||||
expect(arr[" 3 "]).toBeUndefined();
|
||||
});
|
||||
|
||||
test("leading 0", () => {
|
||||
expect(arr["00"]).toBeUndefined();
|
||||
expect(arr["01"]).toBeUndefined();
|
||||
expect(arr["02"]).toBeUndefined();
|
||||
expect(arr["03"]).toBeUndefined();
|
||||
});
|
||||
|
||||
test("leading +/-", () => {
|
||||
["+", "-"].forEach(op => {
|
||||
expect(arr[op + "0"]).toBeUndefined();
|
||||
expect(arr[op + "1"]).toBeUndefined();
|
||||
|
||||
expect(arr[op + "-0"]).toBeUndefined();
|
||||
expect(arr[op + "+0"]).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
||||
test("combined", () => {
|
||||
expect(arr["+00"]).toBeUndefined();
|
||||
expect(arr[" +0"]).toBeUndefined();
|
||||
expect(arr[" +0 "]).toBeUndefined();
|
||||
expect(arr[" 00 "]).toBeUndefined();
|
||||
});
|
||||
});
|
@ -1,7 +0,0 @@
|
||||
test("indexing the array doesn't strip whitespace if it's a number", () => {
|
||||
var a = [];
|
||||
a[1] = 1;
|
||||
|
||||
expect(a["1"]).toBe(1);
|
||||
expect(a[" 1 "]).toBeUndefined();
|
||||
});
|
Loading…
Reference in New Issue
Block a user