From aaa301ead267128c9edb4a070b9a44f54521b9c1 Mon Sep 17 00:00:00 2001 From: Bart van Strien Date: Tue, 9 Jul 2013 15:00:51 +0200 Subject: [PATCH] Error if getting/setting out-of-range samples (issue #674) --- src/modules/sound/SoundData.cpp | 4 ++-- src/modules/sound/wrap_SoundData.cpp | 18 ++++++++++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/modules/sound/SoundData.cpp b/src/modules/sound/SoundData.cpp index 2a4db4ac6..afaf0d3f7 100644 --- a/src/modules/sound/SoundData.cpp +++ b/src/modules/sound/SoundData.cpp @@ -161,7 +161,7 @@ void SoundData::setSample(int i, float sample) { // Check range. if (i < 0 || i >= size/(bits/8)) - return; + throw love::Exception("Attempt to set out-of-range sample!"); if (bits == 16) { @@ -180,7 +180,7 @@ float SoundData::getSample(int i) const { // Check range. if (i < 0 || i >= size/(bits/8)) - return 0; + throw love::Exception("Attempt to get out-of-range sample!"); if (bits == 16) { diff --git a/src/modules/sound/wrap_SoundData.cpp b/src/modules/sound/wrap_SoundData.cpp index e9469d914..5c123e122 100644 --- a/src/modules/sound/wrap_SoundData.cpp +++ b/src/modules/sound/wrap_SoundData.cpp @@ -72,7 +72,14 @@ int w_SoundData_setSample(lua_State *L) SoundData *sd = luax_checksounddata(L, 1); int i = (int)lua_tointeger(L, 2); float sample = (float)lua_tonumber(L, 3); - sd->setSample(i, sample); + try + { + sd->setSample(i, sample); + } + catch (love::Exception &e) + { + return luaL_error(L, "%s", e.what()); + } return 0; } @@ -80,7 +87,14 @@ int w_SoundData_getSample(lua_State *L) { SoundData *sd = luax_checksounddata(L, 1); int i = (int)lua_tointeger(L, 2); - lua_pushnumber(L, sd->getSample(i)); + try + { + lua_pushnumber(L, sd->getSample(i)); + } + catch (love::Exception &e) + { + return luaL_error(L, "%s", e.what()); + } return 1; }