Avoid emqx crashes due to auth plugins (#3048)
Avoid emqx crashes due to auth plugins
This commit is contained in:
parent
978153d993
commit
d730b24494
|
@ -115,7 +115,7 @@ run_fold(HookPoint, Args, Acc) ->
|
|||
|
||||
|
||||
do_run([#callback{action = Action, filter = Filter} | Callbacks], Args) ->
|
||||
case filter_passed(Filter, Args) andalso execute(Action, Args) of
|
||||
case filter_passed(Filter, Args) andalso safe_execute(Action, Args) of
|
||||
%% stop the hook chain and return
|
||||
stop -> ok;
|
||||
%% continue the hook chain, in following cases:
|
||||
|
@ -128,7 +128,7 @@ do_run([], _Args) ->
|
|||
|
||||
do_run_fold([#callback{action = Action, filter = Filter} | Callbacks], Args, Acc) ->
|
||||
Args1 = Args ++ [Acc],
|
||||
case filter_passed(Filter, Args1) andalso execute(Action, Args1) of
|
||||
case filter_passed(Filter, Args1) andalso safe_execute(Action, Args1) of
|
||||
%% stop the hook chain
|
||||
stop -> Acc;
|
||||
%% stop the hook chain with NewAcc
|
||||
|
@ -148,6 +148,15 @@ filter_passed(undefined, _Args) -> true;
|
|||
filter_passed(Filter, Args) ->
|
||||
execute(Filter, Args).
|
||||
|
||||
safe_execute(Fun, Args) ->
|
||||
try execute(Fun, Args) of
|
||||
Result -> Result
|
||||
catch
|
||||
_:Reason:Stacktrace ->
|
||||
?LOG(error, "Failed to execute ~p(~p): ~p", [Fun, Args, {Reason, Stacktrace}]);
|
||||
ok
|
||||
end.
|
||||
|
||||
%% @doc execute a function.
|
||||
execute(Fun, Args) when is_function(Fun) ->
|
||||
erlang:apply(Fun, Args);
|
||||
|
|
Loading…
Reference in New Issue