File 7751-kernel-Fixed-UDP-option-processing.patch of Package erlang

From c110a0317f5aa2a3b7ceb12fd9ae2f3d5092b33c Mon Sep 17 00:00:00 2001
From: Micael Karlberg <bmk@erlang.org>
Date: Wed, 16 Nov 2022 16:26:49 +0100
Subject: [PATCH 1/5] [kernel] Fixed UDP option processing

If the options argument to the (gen_udp-) open function call
contained the options add_membership or drop_membership, any
option earlier in the options list was discarded.

OTP-18323
---
 lib/kernel/src/inet.erl | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/lib/kernel/src/inet.erl b/lib/kernel/src/inet.erl
index 37f1706fb2..d836f6b367 100644
--- a/lib/kernel/src/inet.erl
+++ b/lib/kernel/src/inet.erl
@@ -1203,8 +1203,8 @@ udp_opt([Opt | Opts], #udp_opts{ifaddr = IfAddr} = R, As) ->
 		    {error, badarg}
 	    end;
         {active,N} when is_integer(N), N < 32768, N >= -32768 ->
-            NOpts = lists:keydelete(active, 1, R#udp_opts.opts),
-            udp_opt(Opts, R#udp_opts { opts = [{active,N}|NOpts] }, As);
+            POpts = lists:keydelete(active, 1, R#udp_opts.opts),
+            udp_opt(Opts, R#udp_opts { opts = [{active,N}|POpts] }, As);
 
         {Membership, {MAddr, If}}
           when ((Membership =:= add_membership) orelse
@@ -1212,7 +1212,8 @@ udp_opt([Opt | Opts], #udp_opts{ifaddr = IfAddr} = R, As) ->
                (tuple_size(MAddr) =:= 4) andalso
                ((If =:= any) orelse (tuple_size(If) =:= 4)) ->
             MembershipOpt = {Membership, {MAddr, If, 0}},
-            udp_opt(Opts, R#udp_opts{opts = [MembershipOpt|Opts]}, As);
+            POpts         = R#udp_opts.opts,
+            udp_opt(Opts, R#udp_opts{opts = [MembershipOpt|POpts]}, As);
 
 	{Name,Val} when is_atom(Name) -> udp_add(Name, Val, R, Opts, As);
 
-- 
2.35.3

openSUSE Build Service is sponsored by