Repository: cassandra Updated Branches: refs/heads/cassandra-2.0 e32423159 -> 536ae7ae9 refs/heads/cassandra-2.1 12c694edb -> c148e2ada refs/heads/cassandra-2.1.0 8aa2b791d -> bd6a766f9 refs/heads/trunk da1981cc4 -> 0494e8f27
Properly handle unrecognized opcodes and flags Patch by Tyler Hobbs; reviewed by Sylvain Lebresne for CASSANDRA-7440 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/e3242315 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/e3242315 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/e3242315 Branch: refs/heads/cassandra-2.1.0 Commit: e32423159d9b31131cc95bccfcfa6b5dabbc070a Parents: 2b973b9 Author: Tyler Hobbs <[email protected]> Authored: Fri Jun 27 09:28:18 2014 -0500 Committer: Tyler Hobbs <[email protected]> Committed: Fri Jun 27 09:28:18 2014 -0500 ---------------------------------------------------------------------- CHANGES.txt | 1 + src/java/org/apache/cassandra/transport/Frame.java | 7 ++++--- src/java/org/apache/cassandra/transport/Message.java | 2 ++ 3 files changed, 7 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/e3242315/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 365722f..d587a94 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -2,6 +2,7 @@ * Fix race in FileCacheService RemovalListener (CASSANDRA-7278) * Fix inconsistent use of consistencyForCommit that allowed LOCAL_QUORUM operations to incorrect become full QUORUM (CASSANDRA-7345) + * Properly handle unrecognized opcodes and flags (CASSANDRA-7440) 2.0.9 http://git-wip-us.apache.org/repos/asf/cassandra/blob/e3242315/src/java/org/apache/cassandra/transport/Frame.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/transport/Frame.java b/src/java/org/apache/cassandra/transport/Frame.java index 6472b39..89755df 100644 --- a/src/java/org/apache/cassandra/transport/Frame.java +++ b/src/java/org/apache/cassandra/transport/Frame.java @@ -92,14 +92,15 @@ public class Frame COMPRESSED, TRACING; + private static final Flag[] ALL_VALUES = values(); + public static EnumSet<Flag> deserialize(int flags) { EnumSet<Flag> set = EnumSet.noneOf(Flag.class); - Flag[] values = Flag.values(); - for (int n = 0; n < 8; n++) + for (int n = 0; n < ALL_VALUES.length; n++) { if ((flags & (1 << n)) != 0) - set.add(values[n]); + set.add(ALL_VALUES[n]); } return set; } http://git-wip-us.apache.org/repos/asf/cassandra/blob/e3242315/src/java/org/apache/cassandra/transport/Message.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/transport/Message.java b/src/java/org/apache/cassandra/transport/Message.java index 0731081..eea3b48 100644 --- a/src/java/org/apache/cassandra/transport/Message.java +++ b/src/java/org/apache/cassandra/transport/Message.java @@ -103,6 +103,8 @@ public abstract class Message public static Type fromOpcode(int opcode, Direction direction) { + if (opcode >= opcodeIdx.length) + throw new ProtocolException(String.format("Unknown opcode %d", opcode)); Type t = opcodeIdx[opcode]; if (t == null) throw new ProtocolException(String.format("Unknown opcode %d", opcode));
