Просмотр исходного кода

Merge pull request #10078 from qzhuyan/fix/william/inval-listener-options-segfault

fix: inval listener option cause segfault
William Yang 3 лет назад
Родитель
Сommit
422f8e3be3

+ 1 - 1
apps/emqx/rebar.config.script

@@ -24,7 +24,7 @@ IsQuicSupp = fun() ->
 end,
 
 Bcrypt = {bcrypt, {git, "https://github.com/emqx/erlang-bcrypt.git", {tag, "0.6.0"}}},
-Quicer = {quicer, {git, "https://github.com/emqx/quic.git", {tag, "0.0.111"}}}.
+Quicer = {quicer, {git, "https://github.com/emqx/quic.git", {tag, "0.0.113"}}}.
 
 Dialyzer = fun(Config) ->
                    {dialyzer, OldDialyzerConfig} = lists:keyfind(dialyzer, 1, Config),

+ 5 - 3
apps/emqx/test/emqx_common_test_helpers.erl

@@ -537,10 +537,12 @@ ensure_quic_listener(Name, UdpPort, ExtraSettings) ->
         mountpoint => <<>>,
         zone => default
     },
-    emqx_config:put([listeners, quic, Name], maps:merge(Conf, ExtraSettings)),
-    case emqx_listeners:start_listener(quic, Name, Conf) of
+    Conf2 = maps:merge(Conf, ExtraSettings),
+    emqx_config:put([listeners, quic, Name], Conf2),
+    case emqx_listeners:start_listener(emqx_listeners:listener_id(quic, Name)) of
         ok -> ok;
-        {error, {already_started, _Pid}} -> ok
+        {error, {already_started, _Pid}} -> ok;
+        Other -> throw(Other)
     end.
 
 %%

+ 14 - 5
apps/emqx/test/emqx_quic_multistreams_SUITE.erl

@@ -33,7 +33,8 @@ all() ->
         {group, mstream},
         {group, shutdown},
         {group, misc},
-        t_listener_with_lowlevel_settings
+        t_listener_with_lowlevel_settings,
+        t_listener_inval_settings
     ].
 
 groups() ->
@@ -1885,8 +1886,17 @@ t_multi_streams_sub_0_rtt_stream_data_cont(Config) ->
     ok = emqtt:disconnect(C),
     ok = emqtt:disconnect(C0).
 
+t_listener_inval_settings(_Config) ->
+    LPort = select_port(),
+    %% too small
+    LowLevelTunings = #{stream_recv_buffer_default => 1024},
+    ?assertThrow(
+        {error, {failed_to_start, _}},
+        emqx_common_test_helpers:ensure_quic_listener(?FUNCTION_NAME, LPort, LowLevelTunings)
+    ).
+
 t_listener_with_lowlevel_settings(_Config) ->
-    LPort = 24567,
+    LPort = select_port(),
     LowLevelTunings = #{
         max_bytes_per_key => 274877906,
         %% In conf schema we use handshake_idle_timeout
@@ -1897,7 +1907,7 @@ t_listener_with_lowlevel_settings(_Config) ->
         %% tls_client_max_send_buffer,
         tls_server_max_send_buffer => 10240,
         stream_recv_window_default => 1024,
-        stream_recv_buffer_default => 1024,
+        stream_recv_buffer_default => 10240,
         conn_flow_control_window => 1024,
         max_stateless_operations => 16,
         initial_window_packets => 1300,
@@ -1936,8 +1946,7 @@ t_listener_with_lowlevel_settings(_Config) ->
     {ok, _, [_SubQos]} = emqtt:subscribe_via(C, {new_data_stream, []}, #{}, [
         {<<"test/1/3">>, [{qos, 2}]}
     ]),
-    ok = emqtt:disconnect(C),
-    emqx_listeners:stop_listener(emqx_listeners:listener_id(quic, ?FUNCTION_NAME)).
+    ok = emqtt:disconnect(C).
 
 %%--------------------------------------------------------------------
 %% Helper functions

+ 2 - 0
changes/ce/fix-10078.en.md

@@ -0,0 +1,2 @@
+Fix an issue that invalid QUIC listener setting could casue segfault. 
+

+ 2 - 0
changes/ce/fix-10078.zh.md

@@ -0,0 +1,2 @@
+修复了无效的 QUIC 监听器设置可能导致 segfault 的问题。
+

+ 1 - 1
mix.exs

@@ -648,7 +648,7 @@ defmodule EMQXUmbrella.MixProject do
   defp quicer_dep() do
     if enable_quicer?(),
       # in conflict with emqx and emqtt
-      do: [{:quicer, github: "emqx/quic", tag: "0.0.111", override: true}],
+      do: [{:quicer, github: "emqx/quic", tag: "0.0.113", override: true}],
       else: []
   end
 

+ 1 - 1
rebar.config.erl

@@ -39,7 +39,7 @@ bcrypt() ->
     {bcrypt, {git, "https://github.com/emqx/erlang-bcrypt.git", {tag, "0.6.0"}}}.
 
 quicer() ->
-    {quicer, {git, "https://github.com/emqx/quic.git", {tag, "0.0.111"}}}.
+    {quicer, {git, "https://github.com/emqx/quic.git", {tag, "0.0.113"}}}.
 
 jq() ->
     {jq, {git, "https://github.com/emqx/jq", {tag, "v0.3.9"}}}.