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

openSUSE Build Service is sponsored by