diff --git a/CHANGES.txt b/CHANGES.txt index 95921ff806..47a599225d 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -6,6 +6,8 @@ Merged from 2.0: * 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) + * (Hadoop) close CqlRecordWriter clients when finished (CASSANDRA-7459) 2.1.0-rc2 diff --git a/src/java/org/apache/cassandra/hadoop/cql3/CqlRecordWriter.java b/src/java/org/apache/cassandra/hadoop/cql3/CqlRecordWriter.java index b9bd15d609..5075be495d 100644 --- a/src/java/org/apache/cassandra/hadoop/cql3/CqlRecordWriter.java +++ b/src/java/org/apache/cassandra/hadoop/cql3/CqlRecordWriter.java @@ -279,6 +279,9 @@ class CqlRecordWriter extends AbstractColumnFamilyRecordWriter deserialize(int flags) { EnumSet 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; } diff --git a/src/java/org/apache/cassandra/transport/Message.java b/src/java/org/apache/cassandra/transport/Message.java index f27d5452e6..eea86e51f4 100644 --- a/src/java/org/apache/cassandra/transport/Message.java +++ b/src/java/org/apache/cassandra/transport/Message.java @@ -110,6 +110,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));