From 58eb5f39d4e57fd9c7409efade54b5792dfefab3 Mon Sep 17 00:00:00 2001 From: Tim Date: Thu, 7 Jul 2016 23:58:52 +0200 Subject: Builtin: Fix check for a player object in core.check_player_privs core.check_player_privs accepts as first argument a name or player object, but just tested for a string. This caused crashes inside builtin, when being passed any unexpected types. This provides a better (duck-typing like) test, better error reporting. --- builtin/game/misc.lua | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'builtin/game') diff --git a/builtin/game/misc.lua b/builtin/game/misc.lua index 918315656..4773e0012 100644 --- a/builtin/game/misc.lua +++ b/builtin/game/misc.lua @@ -48,11 +48,13 @@ function core.after(after, func, ...) } end -function core.check_player_privs(player_or_name, ...) - local name = player_or_name - -- Check if we have been provided with a Player object. - if type(name) ~= "string" then +function core.check_player_privs(name, ...) + local arg_type = type(name) + if (arg_type == "userdata" or arg_type == "table") and + name.get_player_name then -- If it quacks like a Player... name = name:get_player_name() + elseif arg_type ~= "string" then + error("Invalid core.check_player_privs argument type: " .. arg_type, 2) end local requested_privs = {...} -- cgit v1.2.3