From 95adf7e347ac8abdc5bce79828fe9f05e11d3091 Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Sun, 8 Oct 2017 16:24:48 -0300 Subject: [PATCH] Error instead of crashing when a frequency of 0 is set on a MouseJoint. Resolves issue #1197. --HG-- branch : minor --- src/modules/physics/box2d/MouseJoint.cpp | 8 ++++++++ src/modules/physics/box2d/wrap_MouseJoint.cpp | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/modules/physics/box2d/MouseJoint.cpp b/src/modules/physics/box2d/MouseJoint.cpp index 1e28b54a9..3cfc2f8d2 100644 --- a/src/modules/physics/box2d/MouseJoint.cpp +++ b/src/modules/physics/box2d/MouseJoint.cpp @@ -25,6 +25,8 @@ #include "World.h" #include "Physics.h" +#include + namespace love { namespace physics @@ -78,6 +80,12 @@ float MouseJoint::getMaxForce() const void MouseJoint::setFrequency(float hz) { + // This is kind of a crappy check. The frequency is used in an internal + // box2d calculation whose result must be > FLT_EPSILON, but other variables + // go into that calculation... + if (hz <= FLT_EPSILON * 2) + throw love::Exception("MouseJoint frequency must be a positive number."); + joint->SetFrequency(hz); } diff --git a/src/modules/physics/box2d/wrap_MouseJoint.cpp b/src/modules/physics/box2d/wrap_MouseJoint.cpp index 281cbdda2..54ce1c4b6 100644 --- a/src/modules/physics/box2d/wrap_MouseJoint.cpp +++ b/src/modules/physics/box2d/wrap_MouseJoint.cpp @@ -70,7 +70,7 @@ int w_MouseJoint_setFrequency(lua_State *L) { MouseJoint *t = luax_checkmousejoint(L, 1); float arg1 = (float)luaL_checknumber(L, 2); - t->setFrequency(arg1); + luax_catchexcept(L, [&]() { t->setFrequency(arg1); }); return 0; }