Index: source/gui/CChart.cpp =================================================================== --- source/gui/CChart.cpp +++ source/gui/CChart.cpp @@ -197,7 +197,7 @@ if (i < pSeriesColor->m_Items.size() && !GUI::ParseColor(pSeriesColor->m_Items[i].GetOriginalString(), data.m_Color, 0)) LOGWARNING("GUI: Error parsing 'series_color' (\"%s\")", utf8_from_wstring(pSeriesColor->m_Items[i].GetOriginalString())); - data.m_Points = pSeries->m_Series[i]; + data.m_Points = std::move(pSeries->m_Series[i]); } UpdateBounds(); Index: source/scriptinterface/ScriptConversions.h =================================================================== --- source/scriptinterface/ScriptConversions.h +++ source/scriptinterface/ScriptConversions.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2017 Wildfire Games. +/* Copyright (C) 2019 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -23,28 +23,30 @@ #include +#define FAIL(msg) STMT(JS_ReportError(cx, msg); return false) +#define FAIL_VOID(msg) STMT(JS_ReportError(cx, msg); return) + template static void ToJSVal_vector(JSContext* cx, JS::MutableHandleValue ret, const std::vector& val) { JSAutoRequest rq(cx); JS::RootedObject obj(cx, JS_NewArrayObject(cx, 0)); if (!obj) - { - ret.setUndefined(); - return; - } + FAIL_VOID("Out of memory"); + + if (val.size() > std::numeric_limits::max()) + FAIL_VOID("JS Array maximum size exceeded"); - ENSURE(val.size() <= std::numeric_limits::max()); for (u32 i = 0; i < val.size(); ++i) { JS::RootedValue el(cx); ScriptInterface::ToJSVal(cx, &el, val[i]); - JS_SetElement(cx, obj, i, el); + if (!JS_SetElement(cx, obj, i, el)) + FAIL_VOID("Could not set Array element"); } + ret.setObject(*obj); } -#define FAIL(msg) STMT(JS_ReportError(cx, msg); return false) - template static bool FromJSVal_vector(JSContext* cx, JS::HandleValue v, std::vector& out) { JSAutoRequest rq(cx); @@ -75,6 +77,7 @@ } #undef FAIL +#undef FAIL_VOID #define JSVAL_VECTOR(T) \ template<> void ScriptInterface::ToJSVal >(JSContext* cx, JS::MutableHandleValue ret, const std::vector& val) \ Index: source/scriptinterface/ScriptConversions.cpp =================================================================== --- source/scriptinterface/ScriptConversions.cpp +++ source/scriptinterface/ScriptConversions.cpp @@ -345,3 +345,6 @@ return true; } + +#undef FAIL +#undef WARN_IF_NOT Index: source/simulation2/scripting/EngineScriptConversions.cpp =================================================================== --- source/simulation2/scripting/EngineScriptConversions.cpp +++ source/simulation2/scripting/EngineScriptConversions.cpp @@ -361,3 +361,6 @@ // define vectors JSVAL_VECTOR(CFixedVector2D) + +#undef FAIL +#undef FAIL_VOID