Browse Source

Range check the tmr interval value.

Plain SDK 1.5.0 bugs out for values >6871948 or so - this commit does
not do anything to mitigate that.
Johny Mattsson 8 years ago
parent
commit
3fb0de859f
1 changed files with 3 additions and 2 deletions
  1. 3 2
      app/modules/tmr.c

+ 3 - 2
app/modules/tmr.c

@@ -140,10 +140,11 @@ static int tmr_register(lua_State* L){
 	sint32_t interval = luaL_checkinteger(L, 2);
 	uint8_t mode = luaL_checkinteger(L, 3);
 	//validate arguments
-	uint8_t args_valid = interval <= 0
+    const int32_t MAX_TIMEOUT = 0xC49BA5; // assuming system_timer_reinit() has *not* been called
+	uint8_t args_invalid = (interval <= 0 || interval > MAX_TIMEOUT)
 		|| (mode != TIMER_MODE_SINGLE && mode != TIMER_MODE_SEMI && mode != TIMER_MODE_AUTO)
 		|| (lua_type(L, 4) != LUA_TFUNCTION && lua_type(L, 4) != LUA_TLIGHTFUNCTION);
-	if(args_valid)
+	if(args_invalid)
 		return luaL_error(L, "wrong arg range");
 	//get the lua function reference
 	lua_pushvalue(L, 4);