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) ->
|
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 the hook chain and return
|
||||||
stop -> ok;
|
stop -> ok;
|
||||||
%% continue the hook chain, in following cases:
|
%% 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) ->
|
do_run_fold([#callback{action = Action, filter = Filter} | Callbacks], Args, Acc) ->
|
||||||
Args1 = 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 the hook chain
|
||||||
stop -> Acc;
|
stop -> Acc;
|
||||||
%% stop the hook chain with NewAcc
|
%% stop the hook chain with NewAcc
|
||||||
|
@ -148,6 +148,15 @@ filter_passed(undefined, _Args) -> true;
|
||||||
filter_passed(Filter, Args) ->
|
filter_passed(Filter, Args) ->
|
||||||
execute(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.
|
%% @doc execute a function.
|
||||||
execute(Fun, Args) when is_function(Fun) ->
|
execute(Fun, Args) when is_function(Fun) ->
|
||||||
erlang:apply(Fun, Args);
|
erlang:apply(Fun, Args);
|
||||||
|
|
Loading…
Reference in New Issue