java-topology/defects/rabbitmq/patch/rmq-0002-sac-coordinator-gb-sets.patch
russell@unturf.com db29a08762 undefect. CWE-407 — 92 sites, 42 ecosystems
B&W print-friendly diagrams + tinkerpop-0001 + wave-3 proof sections.
Squash of 94 local commits onto remote master.
2026-03-26 19:48:18 -04:00

28 lines
1.1 KiB
Diff

--- a/deps/rabbit/src/rabbit_stream_sac_coordinator.erl
+++ b/deps/rabbit/src/rabbit_stream_sac_coordinator.erl
@@ -200,15 +200,18 @@ filter_dead_pids(Pids) ->
- lists:filter(fun(Pid) -> not is_pid_alive(Pid) end, Pids).
+ MemberSet = gb_sets:from_list(rabbit_nodes:list_members()), %% CWE-407 fix: hoist O(N) list build outside filter
+ lists:filter(fun(Pid) -> not is_pid_alive(Pid, MemberSet) end, Pids).
-is_pid_alive(Pid) when node(Pid) =:= node() ->
+is_pid_alive(Pid) ->
+ is_pid_alive(Pid, gb_sets:from_list(rabbit_nodes:list_members())).
+
+is_pid_alive(Pid, _MemberSet) when node(Pid) =:= node() ->
erlang:is_process_alive(Pid);
-is_pid_alive(Pid) ->
+is_pid_alive(Pid, MemberSet) ->
PidNode = node(Pid),
- case lists:member(PidNode, rabbit_nodes:list_members()) of
+ case gb_sets:is_member(PidNode, MemberSet) of %% CWE-407 fix: O(log N) gb_sets lookup vs O(N) list scan
true ->
try
erpc:call(PidNode, erlang, is_process_alive, [Pid], 5000)
catch
_:_ ->
true
end;
false ->
false
end.