]> granicus.if.org Git - ejabberd/commitdiff
Make mod_http_api assume that missing args of type list are empty list
authorPaweł Chmielowski <pchmielowski@process-one.net>
Mon, 3 Dec 2018 12:52:04 +0000 (13:52 +0100)
committerPaweł Chmielowski <pchmielowski@process-one.net>
Mon, 3 Dec 2018 12:53:07 +0000 (13:53 +0100)
src/mod_http_api.erl

index 4d4a40f79c69ba998606ffda2ad3eb13b1385f2f..e3c7b3bc73114fa98ec0a4185228dd8dfbaafd43 100644 (file)
@@ -325,15 +325,20 @@ handle2(Call, Auth, Args, Version) when is_atom(Call), is_list(Args) ->
            format_command_result(Call, Auth, Res, Version)
     end.
 
-get_elem_delete(A, L) ->
+get_elem_delete(A, L, F) ->
     case proplists:get_all_values(A, L) of
       [Value] -> {Value, proplists:delete(A, L)};
       [_, _ | _] ->
          %% Crash reporting the error
          exit({duplicated_attribute, A, L});
       [] ->
-         %% Report the error and then force a crash
-         exit({attribute_not_found, A, L})
+         case F of
+             {list, _} ->
+                 {[], L};
+             _ ->
+                 %% Report the error and then force a crash
+                 exit({attribute_not_found, A, L})
+         end
     end.
 
 format_args(Args, ArgsFormat) ->
@@ -342,7 +347,7 @@ format_args(Args, ArgsFormat) ->
                                          {Args1, Res}) ->
                                             {ArgValue, Args2} =
                                                 get_elem_delete(ArgName,
-                                                                Args1),
+                                                                Args1, ArgFormat),
                                             Formatted = format_arg(ArgValue,
                                                                    ArgFormat),
                                             {Args2, Res ++ [Formatted]}