diff --git a/src/modules/math/BezierCurve.cpp b/src/modules/math/BezierCurve.cpp index f120e5705..0eda1228f 100644 --- a/src/modules/math/BezierCurve.cpp +++ b/src/modules/math/BezierCurve.cpp @@ -162,6 +162,8 @@ Vector BezierCurve::eval(double t) const { if (t < 0 || t > 1) throw Exception("Invalid evaluation parameter: must be between 0 and 1"); + if (controlPoints.size() < 2) + throw Exception("Invalid Bezier curve: Not enough control points."); // de casteljau vector points(controlPoints); @@ -174,6 +176,8 @@ Vector BezierCurve::eval(double t) const vector BezierCurve::render(size_t accuracy) const { + if (controlPoints.size() < 2) + throw Exception("Invalid Bezier curve: Not enough control points."); vector vertices(controlPoints); subdivide(vertices, accuracy); return vertices; diff --git a/src/modules/math/wrap_BezierCurve.cpp b/src/modules/math/wrap_BezierCurve.cpp index 040432130..9b7b7db35 100644 --- a/src/modules/math/wrap_BezierCurve.cpp +++ b/src/modules/math/wrap_BezierCurve.cpp @@ -168,7 +168,15 @@ int w_BezierCurve_render(lua_State *L) BezierCurve *curve = luax_checkbeziercurve(L, 1); int accuracy = luaL_optinteger(L, 2, 5); - std::vector points = curve->render(accuracy); + std::vector points; + try + { + points = curve->render(accuracy); + } + catch (Exception &e) + { + return luaL_error(L, e.what()); + } lua_createtable(L, points.size()*2, 0); for (size_t i = 0; i < points.size(); ++i)