From 4e1331fde8889e9d3cb9ce4ea0b04e40f3b31114 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Mon, 7 Jan 2019 12:10:29 +0300 Subject: [PATCH] Fixed - NPE in CommandPubSubDecoder. #1838 --- .../client/handler/CommandPubSubDecoder.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/redisson/src/main/java/org/redisson/client/handler/CommandPubSubDecoder.java b/redisson/src/main/java/org/redisson/client/handler/CommandPubSubDecoder.java index df7d9a7f6..5e0772612 100644 --- a/redisson/src/main/java/org/redisson/client/handler/CommandPubSubDecoder.java +++ b/redisson/src/main/java/org/redisson/client/handler/CommandPubSubDecoder.java @@ -152,7 +152,7 @@ public class CommandPubSubDecoder extends CommandDecoder { pubSubConnection.onMessage((PubSubStatusMessage) result); } else if (result instanceof PubSubMessage) { pubSubConnection.onMessage((PubSubMessage) result); - } else { + } else if (result instanceof PubSubPatternMessage) { pubSubConnection.onMessage((PubSubPatternMessage) result); } } @@ -182,7 +182,7 @@ public class CommandPubSubDecoder extends CommandDecoder { pubSubConnection.onMessage((PubSubStatusMessage) result); } else if (result instanceof PubSubMessage) { pubSubConnection.onMessage((PubSubMessage) result); - } else { + } else if (result instanceof PubSubPatternMessage) { pubSubConnection.onMessage((PubSubPatternMessage) result); } } else { @@ -242,11 +242,11 @@ public class CommandPubSubDecoder extends CommandDecoder { if (parts.size() == 2 && "message".equals(parts.get(0))) { byte[] channelName = (byte[]) parts.get(1); - return entries.get(new ChannelName(channelName)).getDecoder().getDecoder(parts.size(), state()); + return getDecoder(parts, channelName); } if (parts.size() == 3 && "pmessage".equals(parts.get(0))) { byte[] patternName = (byte[]) parts.get(1); - return entries.get(new ChannelName(patternName)).getDecoder().getDecoder(parts.size(), state()); + return getDecoder(parts, patternName); } } @@ -257,4 +257,12 @@ public class CommandPubSubDecoder extends CommandDecoder { return super.selectDecoder(data, parts); } + private Decoder getDecoder(List parts, byte[] name) { + PubSubEntry entry = entries.get(new ChannelName(name)); + if (entry != null) { + return entry.getDecoder().getDecoder(parts.size(), state()); + } + return ByteArrayCodec.INSTANCE.getValueDecoder(); + } + }