Commits

vrld committed b249a32

Fix issue #724: Bezier curve rendering/eval crashes with empty curves.

  • Participants
  • Parent commits b661ae3

Comments (0)

Files changed (2)

File src/modules/math/BezierCurve.cpp

 {
 	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<Vector> points(controlPoints);
 
 vector<Vector> BezierCurve::render(size_t accuracy) const
 {
+	if (controlPoints.size() < 2)
+		throw Exception("Invalid Bezier curve: Not enough control points.");
 	vector<Vector> vertices(controlPoints);
 	subdivide(vertices, accuracy);
 	return vertices;

File src/modules/math/wrap_BezierCurve.cpp

 	BezierCurve *curve = luax_checkbeziercurve(L, 1);
 	int accuracy = luaL_optinteger(L, 2, 5);
 
-	std::vector<Vector> points = curve->render(accuracy);
+	std::vector<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)