Ensure the custom function is not null in Array#{sort,map,reduce,filter,any,all}()

refs #8047
This commit is contained in:
Alexander A. Klimov 2020-06-09 12:26:16 +02:00
parent e9b8fc234b
commit 9c85401914
1 changed files with 6 additions and 0 deletions

View File

@ -83,6 +83,7 @@ static Array::Ptr ArraySort(const std::vector<Value>& args)
std::sort(arr->Begin(), arr->End()); std::sort(arr->Begin(), arr->End());
} else { } else {
Function::Ptr function = args[0]; Function::Ptr function = args[0];
REQUIRE_NOT_NULL(function);
if (vframe->Sandboxed && !function->IsSideEffectFree()) if (vframe->Sandboxed && !function->IsSideEffectFree())
BOOST_THROW_EXCEPTION(ScriptError("Sort function must be side-effect free.")); BOOST_THROW_EXCEPTION(ScriptError("Sort function must be side-effect free."));
@ -123,6 +124,7 @@ static Array::Ptr ArrayMap(const Function::Ptr& function)
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame(); ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
Array::Ptr self = static_cast<Array::Ptr>(vframe->Self); Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
REQUIRE_NOT_NULL(self); REQUIRE_NOT_NULL(self);
REQUIRE_NOT_NULL(function);
if (vframe->Sandboxed && !function->IsSideEffectFree()) if (vframe->Sandboxed && !function->IsSideEffectFree())
BOOST_THROW_EXCEPTION(ScriptError("Map function must be side-effect free.")); BOOST_THROW_EXCEPTION(ScriptError("Map function must be side-effect free."));
@ -142,6 +144,7 @@ static Value ArrayReduce(const Function::Ptr& function)
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame(); ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
Array::Ptr self = static_cast<Array::Ptr>(vframe->Self); Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
REQUIRE_NOT_NULL(self); REQUIRE_NOT_NULL(self);
REQUIRE_NOT_NULL(function);
if (vframe->Sandboxed && !function->IsSideEffectFree()) if (vframe->Sandboxed && !function->IsSideEffectFree())
BOOST_THROW_EXCEPTION(ScriptError("Reduce function must be side-effect free.")); BOOST_THROW_EXCEPTION(ScriptError("Reduce function must be side-effect free."));
@ -164,6 +167,7 @@ static Array::Ptr ArrayFilter(const Function::Ptr& function)
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame(); ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
Array::Ptr self = static_cast<Array::Ptr>(vframe->Self); Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
REQUIRE_NOT_NULL(self); REQUIRE_NOT_NULL(self);
REQUIRE_NOT_NULL(function);
if (vframe->Sandboxed && !function->IsSideEffectFree()) if (vframe->Sandboxed && !function->IsSideEffectFree())
BOOST_THROW_EXCEPTION(ScriptError("Filter function must be side-effect free.")); BOOST_THROW_EXCEPTION(ScriptError("Filter function must be side-effect free."));
@ -184,6 +188,7 @@ static bool ArrayAny(const Function::Ptr& function)
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame(); ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
Array::Ptr self = static_cast<Array::Ptr>(vframe->Self); Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
REQUIRE_NOT_NULL(self); REQUIRE_NOT_NULL(self);
REQUIRE_NOT_NULL(function);
if (vframe->Sandboxed && !function->IsSideEffectFree()) if (vframe->Sandboxed && !function->IsSideEffectFree())
BOOST_THROW_EXCEPTION(ScriptError("Filter function must be side-effect free.")); BOOST_THROW_EXCEPTION(ScriptError("Filter function must be side-effect free."));
@ -202,6 +207,7 @@ static bool ArrayAll(const Function::Ptr& function)
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame(); ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
Array::Ptr self = static_cast<Array::Ptr>(vframe->Self); Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
REQUIRE_NOT_NULL(self); REQUIRE_NOT_NULL(self);
REQUIRE_NOT_NULL(function);
if (vframe->Sandboxed && !function->IsSideEffectFree()) if (vframe->Sandboxed && !function->IsSideEffectFree())
BOOST_THROW_EXCEPTION(ScriptError("Filter function must be side-effect free.")); BOOST_THROW_EXCEPTION(ScriptError("Filter function must be side-effect free."));