mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 04:57:44 +00:00
LibJS: Don't create "valid" PropertyName from null string
When value.to_string() throws an exception it returns a null string in which case we must not construct a valid PropertyName. Also ASSERT in PropertyName(String) and PropertyName(FlyString) to prevent this from happening in the future. Fixes #3941.
This commit is contained in:
parent
8afe1c8165
commit
41837f548d
2 changed files with 18 additions and 1 deletions
|
@ -48,7 +48,10 @@ public:
|
||||||
return &value.as_symbol();
|
return &value.as_symbol();
|
||||||
if (value.is_integer() && value.as_i32() >= 0)
|
if (value.is_integer() && value.as_i32() >= 0)
|
||||||
return value.as_i32();
|
return value.as_i32();
|
||||||
return value.to_string(global_object);
|
auto string = value.to_string(global_object);
|
||||||
|
if (string.is_null())
|
||||||
|
return {};
|
||||||
|
return string;
|
||||||
}
|
}
|
||||||
|
|
||||||
PropertyName() { }
|
PropertyName() { }
|
||||||
|
@ -70,18 +73,21 @@ public:
|
||||||
: m_type(Type::String)
|
: m_type(Type::String)
|
||||||
, m_string(FlyString(string))
|
, m_string(FlyString(string))
|
||||||
{
|
{
|
||||||
|
ASSERT(!string.is_null());
|
||||||
}
|
}
|
||||||
|
|
||||||
PropertyName(const FlyString& string)
|
PropertyName(const FlyString& string)
|
||||||
: m_type(Type::String)
|
: m_type(Type::String)
|
||||||
, m_string(string)
|
, m_string(string)
|
||||||
{
|
{
|
||||||
|
ASSERT(!string.is_null());
|
||||||
}
|
}
|
||||||
|
|
||||||
PropertyName(Symbol* symbol)
|
PropertyName(Symbol* symbol)
|
||||||
: m_type(Type::Symbol)
|
: m_type(Type::Symbol)
|
||||||
, m_symbol(symbol)
|
, m_symbol(symbol)
|
||||||
{
|
{
|
||||||
|
ASSERT(symbol);
|
||||||
}
|
}
|
||||||
|
|
||||||
PropertyName(const StringOrSymbol& string_or_symbol)
|
PropertyName(const StringOrSymbol& string_or_symbol)
|
||||||
|
|
|
@ -6,3 +6,14 @@ test("Issue #3459, exception in computed property expression", () => {
|
||||||
"foo"[bar]();
|
"foo"[bar]();
|
||||||
}).toThrow(ReferenceError);
|
}).toThrow(ReferenceError);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("Issue #3941, exception in computed property's toString()", () => {
|
||||||
|
expect(() => {
|
||||||
|
const o = {
|
||||||
|
toString() {
|
||||||
|
throw Error();
|
||||||
|
},
|
||||||
|
};
|
||||||
|
"foo"[o];
|
||||||
|
}).toThrow(Error);
|
||||||
|
});
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue