]> granicus.if.org Git - ejabberd/commitdiff
Don't crash on malformed IP addresses
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>
Tue, 28 Feb 2017 10:11:49 +0000 (13:11 +0300)
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>
Tue, 28 Feb 2017 10:11:49 +0000 (13:11 +0300)
src/xmpp_stream_out.erl

index 57f674ec00574023fe5221e82ee0da38619e9d07..6137a587bc9d2499c3099b3c06956a8aee5ff965 100644 (file)
@@ -964,16 +964,18 @@ connect(AddrPorts, #{sockmod := SockMod} = State) ->
                     {ok, term(), ip_port()} | network_error().
 connect([{Addr, Port}|AddrPorts], SockMod, Timeout, _) ->
     Type = get_addr_type(Addr),
-    case SockMod:connect(Addr, Port,
-                        [binary, {packet, 0},
-                         {send_timeout, ?TCP_SEND_TIMEOUT},
-                         {send_timeout_close, true},
-                         {active, false}, Type],
-                        Timeout) of
+    try SockMod:connect(Addr, Port,
+                       [binary, {packet, 0},
+                        {send_timeout, ?TCP_SEND_TIMEOUT},
+                        {send_timeout_close, true},
+                        {active, false}, Type],
+                       Timeout) of
        {ok, Socket} ->
            {ok, Socket, {Addr, Port}};
        Err ->
            connect(AddrPorts, SockMod, Timeout, Err)
+    catch _:badarg ->
+           connect(AddrPorts, SockMod, Timeout, {error, einval})
     end;
 connect([], _SockMod, _Timeout, Err) ->
     Err.