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