File 2313-ssl-Add-missing-gen_server-return-value-in-DTLS-pack.patch of Package erlang

From 6692b1e347a6d843f11fe8117af1c1534a505085 Mon Sep 17 00:00:00 2001
From: Ingela Anderton Andin <ingela@erlang.org>
Date: Tue, 4 Jun 2019 15:42:32 +0200
Subject: [PATCH] ssl: Add missing gen_server return value in DTLS packet demux
 process

---
 lib/ssl/src/dtls_packet_demux.erl |  6 ++---
 lib/ssl/test/ssl_basic_SUITE.erl  | 46 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 49 insertions(+), 3 deletions(-)

diff --git a/lib/ssl/src/dtls_packet_demux.erl b/lib/ssl/src/dtls_packet_demux.erl
index c6431b55a9..94b350eaa5 100644
--- a/lib/ssl/src/dtls_packet_demux.erl
+++ b/lib/ssl/src/dtls_packet_demux.erl
@@ -154,9 +154,9 @@ handle_info({Transport, Socket, IP, InPortNo, _} = Msg, #state{listener = Socket
 handle_info({PassiveTag, Socket},
             #state{active_n = N,
                    listener = Socket,
-                   transport = {_,_,_, udp_error, PassiveTag}}) ->
-    next_datagram(Socket, N);
-
+                   transport = {_, _, _, _, PassiveTag}} = State) ->
+    next_datagram(Socket, N),
+    {noreply, State}; 
 %% UDP socket does not have a connection and should not receive an econnreset
 %% This does however happens on some windows versions. Just ignoring it
 %% appears to make things work as expected! 
diff --git a/lib/ssl/test/ssl_basic_SUITE.erl b/lib/ssl/test/ssl_basic_SUITE.erl
index 20d9f28512..785ea98fa0 100644
--- a/lib/ssl/test/ssl_basic_SUITE.erl
+++ b/lib/ssl/test/ssl_basic_SUITE.erl
@@ -164,6 +164,7 @@ api_tests() ->
      prf,
      socket_options,
      active_n,
+     internal_active_1,
      cipher_suites,
      handshake_continue,
      handshake_continue_timeout,
@@ -488,6 +489,15 @@ init_per_testcase(accept_pool, Config) ->
 	    ssl_test_lib:ct_log_supported_protocol_versions(Config),
 	    Config
     end;
+
+init_per_testcase(internal_active_1, Config) ->
+    ssl:stop(),
+    application:load(ssl),
+    application:set_env(ssl, internal_active_n, 1),
+    ssl:start(),
+    ct:timetrap({seconds, 5}),
+    Config;
+
 init_per_testcase(controller_dies, Config) ->
     ct:timetrap({seconds, 10}),
     Config;
@@ -510,6 +520,10 @@ end_per_testcase(reuse_session_expired, Config) ->
     application:unset_env(ssl, session_delay_cleanup_time),
     end_per_testcase(default_action, Config);
 
+end_per_testcase(internal_active_n, Config) ->
+    application:unset_env(ssl, internal_active_n),
+    end_per_testcase(default_action, Config);
+
 end_per_testcase(Case, Config) when Case == protocol_versions;
 				    Case == empty_protocol_versions->
     application:unset_env(ssl, protocol_versions),
@@ -1975,6 +1989,10 @@ recv_active_once(Config) when is_list(Config) ->
     ssl_test_lib:close(Server),
     ssl_test_lib:close(Client).
 
+
+
+
+
 %%--------------------------------------------------------------------
 recv_active_n() ->
     [{doc,"Test recv on active (n) socket"}].
@@ -2001,6 +2019,7 @@ recv_active_n(Config) when is_list(Config) ->
     ssl_test_lib:close(Server),
     ssl_test_lib:close(Client).
 
+
 %%--------------------------------------------------------------------
 %% Test case adapted from gen_tcp_misc_SUITE.
 active_n() ->
@@ -2226,6 +2245,33 @@ upgrade_result(Socket) ->
 	    ok
     end.
 
+
+%%--------------------------------------------------------------------
+internal_active_1() ->
+    [{doc,"Test internal active 1 (behave as internal active once)"}].
+
+internal_active_1(Config) when is_list(Config) ->
+    ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+    ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+    {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+    Server = 
+	ssl_test_lib:start_server([{node, ServerNode}, {port, 0}, 
+				   {from, self()}, 
+				   {mfa, {ssl_test_lib, send_recv_result_active, []}},
+				   {options,  [{active, true} | ServerOpts]}]),
+    Port = ssl_test_lib:inet_port(Server),
+    Client = 
+	ssl_test_lib:start_client([{node, ClientNode}, {port, Port}, 
+				   {host, Hostname},
+				   {from, self()}, 
+				   {mfa, {ssl_test_lib, send_recv_result_active, []}},
+				   {options, [{active, true} | ClientOpts]}]),
+        
+    ssl_test_lib:check_result(Server, ok, Client, ok),
+    
+    ssl_test_lib:close(Server),
+    ssl_test_lib:close(Client).
+
 %%--------------------------------------------------------------------
 tls_upgrade_with_timeout() ->
     [{doc,"Test ssl_accept/3"}].
-- 
2.16.4

openSUSE Build Service is sponsored by