From: Tim Date: Thu, 7 Jul 2016 21:58:52 +0000 (+0200) Subject: Builtin: Fix check for a player object in core.check_player_privs X-Git-Tag: 0.4.15~305 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=58eb5f39d4e57fd9c7409efade54b5792dfefab3;p=oweals%2Fminetest.git 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. --- 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 = {...}