From 5f94b7b6d1406f77d35ab8e50dcd02a8807899eb Mon Sep 17 00:00:00 2001 From: Connor Lanigan Date: Tue, 5 May 2026 10:15:21 +0200 Subject: [PATCH] fix: Attempted immutable list modification causes runtime exception (#2038) --- .../jsonrpc/SignalJsonRpcDispatcherHandler.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/asamk/signal/jsonrpc/SignalJsonRpcDispatcherHandler.java b/src/main/java/org/asamk/signal/jsonrpc/SignalJsonRpcDispatcherHandler.java index 14ff0076..166c822a 100644 --- a/src/main/java/org/asamk/signal/jsonrpc/SignalJsonRpcDispatcherHandler.java +++ b/src/main/java/org/asamk/signal/jsonrpc/SignalJsonRpcDispatcherHandler.java @@ -25,12 +25,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.nio.channels.ClosedChannelException; +import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Supplier; +import java.util.stream.Collectors; public class SignalJsonRpcDispatcherHandler { @@ -41,8 +43,8 @@ public class SignalJsonRpcDispatcherHandler { private final JsonRpcReader jsonRpcReader; private final boolean noReceiveOnStart; - private final Map>> receiveHandlers = new HashMap<>(); - private final Map>> callEventHandlers = new HashMap<>(); + private final Map>> receiveHandlers = new HashMap<>(); + private final Map>> callEventHandlers = new HashMap<>(); private SignalJsonRpcCommandHandler commandHandler; public SignalJsonRpcDispatcherHandler( @@ -91,7 +93,9 @@ public class SignalJsonRpcDispatcherHandler { private int subscribeCallEvents(final Collection managers) { final var subscriptionId = nextSubscriptionId.getAndIncrement(); - final var listeners = managers.stream().map(m -> createCallEventHandler(m, subscriptionId)).toList(); + final var listeners = managers.stream() + .map(m -> createCallEventHandler(m, subscriptionId)) + .collect(Collectors.toCollection(ArrayList::new)); callEventHandlers.put(subscriptionId, listeners); return subscriptionId; } @@ -146,7 +150,7 @@ public class SignalJsonRpcDispatcherHandler { final var subscriptionId = nextSubscriptionId.getAndIncrement(); final var handlers = managers.stream() .map(m -> createReceiveHandler(m, subscriptionId, internalSubscription)) - .toList(); + .collect(Collectors.toCollection(ArrayList::new)); receiveHandlers.put(subscriptionId, handlers); return subscriptionId;