mirror of
https://github.com/fergalmoran/ladybird.git
synced 2026-01-06 08:36:15 +00:00
LibJS: Don't "copy construct" temporary value in ThrowCompletionOr ctor
It was possible for the generic ThrowCompletionOr constructor to "copy-construct" a JS Object when instantiating a ThrowCompletionOr via e.g `return *object;`. This happened because it chose the Object(Object& prototype) constructor which will be removed in a subsequent commit. It was not easy to debug. As a first step towards avoiding this in the future, the generic ThrowCompletionOr constructor now takes the value as a const reference.
This commit is contained in:
@@ -268,9 +268,9 @@ public:
|
||||
// Most commonly: Value from Object* or similar, so we can omit the curly braces from "return { TRY(...) };".
|
||||
// Disabled for POD types to avoid weird conversion shenanigans.
|
||||
template<typename WrappedValueType>
|
||||
ThrowCompletionOr(WrappedValueType value)
|
||||
ThrowCompletionOr(WrappedValueType const& value)
|
||||
requires(!IsPOD<ValueType>)
|
||||
: m_value(move(value))
|
||||
: m_value(value)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user