File 0235-kernel-Reject-.app-files-with-invalid-parameters.patch of Package erlang
From 753c719a4332cca00ba7eac644335e4a68d9f127 Mon Sep 17 00:00:00 2001
From: Lukas Larsson <lukas@erlang.org>
Date: Mon, 11 Apr 2022 14:30:52 +0200
Subject: [PATCH] kernel: Reject .app files with invalid parameters
Closes #5877
---
lib/kernel/src/application_controller.erl | 5 +++++
lib/kernel/test/application_SUITE.erl | 17 +++++++++++++++--
2 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/lib/kernel/src/application_controller.erl b/lib/kernel/src/application_controller.erl
index 1f428c560b..b82c3b0784 100644
--- a/lib/kernel/src/application_controller.erl
+++ b/lib/kernel/src/application_controller.erl
@@ -1541,6 +1541,11 @@ make_appl_i({application, Name, Opts}) when is_atom(Name), is_list(Opts) ->
end,
Phases = get_opt(start_phases, Opts, undefined),
Env = get_opt(env, Opts, []),
+ case check_para(Env, Name) of
+ ok -> ok;
+ {error, Reason} ->
+ throw({error, {invalid_options, Reason}})
+ end,
MaxP = get_opt(maxP, Opts, infinity),
MaxT = get_opt(maxT, Opts, infinity),
IncApps = get_opt(included_applications, Opts, []),
diff --git a/lib/kernel/test/application_SUITE.erl b/lib/kernel/test/application_SUITE.erl
index 6817435576..019ca3e7f1 100644
--- a/lib/kernel/test/application_SUITE.erl
+++ b/lib/kernel/test/application_SUITE.erl
@@ -35,7 +35,7 @@
permit_false_start_local/1, permit_false_start_dist/1, script_start/1,
nodedown_start/1, init2973/0, loop2973/0, loop5606/1, otp_16504/1]).
--export([config_change/1, persistent_env/1,
+-export([config_change/1, persistent_env/1, invalid_app_file/1,
distr_changed_tc1/1, distr_changed_tc2/1,
ensure_started/1, ensure_all_started/1,
shutdown_func/1, do_shutdown/1, shutdown_timeout/1, shutdown_deadlock/1,
@@ -62,7 +62,7 @@ all() ->
{group, distr_changed}, config_change, shutdown_func, shutdown_timeout,
shutdown_deadlock, config_relative_paths, optional_applications,
persistent_env, handle_many_config_files, format_log_1, format_log_2,
- configfd_bash, configfd_port_program].
+ configfd_bash, configfd_port_program, invalid_app_file].
groups() ->
[{reported_bugs, [],
@@ -2439,6 +2439,19 @@ persistent_env(Conf) when is_list(Conf) ->
%% Clean up
ok = application:unload(appinc).
+%% Test that application app file error handling works as it should
+invalid_app_file(_Config) ->
+
+ {error,{bad_application,{application,"name",[]}}}
+ = application:load({application, "name",[]}),
+ {error,{invalid_options,#{}}}
+ = application:load({application, name,#{}}),
+ {error, {invalid_options,_}} =
+ application:load({application,name,[{env,[{"key",value}]}]}),
+ {error, {invalid_options,_}} =
+ application:load({application,name,[{env,[key]}]}),
+ {error, {invalid_options,_}} =
+ application:load({application,name,[{env,[{key,value},{key,value}]}]}).
%% Test more than one config file defined by one -config parameter:
handle_many_config_files(Conf) when is_list(Conf) ->
--
2.35.3