]> granicus.if.org Git - ejabberd/commitdiff
Don't crash on malformed 'modules' section
authorEvgeny Khramtsov <ekhramtsov@process-one.net>
Tue, 19 Feb 2019 09:31:18 +0000 (12:31 +0300)
committerEvgeny Khramtsov <ekhramtsov@process-one.net>
Tue, 19 Feb 2019 09:31:18 +0000 (12:31 +0300)
src/ejabberd_config.erl
src/gen_mod.erl

index eaf513e77db689d93d7d220e351ee28540a2c703..ed52c728b597c5e7f0c5c61dff7603083c8841f0 100644 (file)
@@ -713,10 +713,16 @@ process_term(Term, State) ->
 
 process_host_term(Term, Host, State, Action) ->
     case Term of
-        {modules, Modules} when Action == set ->
-            set_option({modules, Host}, replace_modules(Modules), State);
-        {modules, Modules} when Action == append ->
-            append_option({modules, Host}, replace_modules(Modules), State);
+        {modules, Modules} ->
+           Modules1 = try (gen_mod:opt_type(modules))(Modules) of
+                          _ -> replace_modules(Modules)
+                      catch _:_ -> Modules
+                      end,
+           if Action == set ->
+                   set_option({modules, Host}, Modules1, State);
+              Action == append ->
+                   append_option({modules, Host}, Modules1, State)
+           end;
         {host, _} ->
             State;
         {hosts, _} ->
index 4d815073c91515989d8e0911d0c0c33dbdcaf3d1..cec3ddb245cc4f53a683b32ac1264d1b745ddbc3 100644 (file)
@@ -937,8 +937,12 @@ opt_type(modules) ->
     fun(Mods) ->
            lists:map(
              fun({M, A}) when is_atom(M) ->
-                     true = is_opt_list(A),
-                     {M, A}
+                     case is_opt_list(A) of
+                         true -> {M, A};
+                         false ->
+                             ?ERROR_MSG("Malformed configuration format of module ~s", [M]),
+                             erlang:error(badarg)
+                     end
              end, Mods)
     end;
 opt_type(_) -> [modules].