From a58a95ddbb438cf8a2980d71b5cdbc2e63642685 Mon Sep 17 00:00:00 2001 From: Aleksey Yeschenko Date: Sun, 22 Dec 2013 20:03:05 +0300 Subject: [PATCH] Validate SliceRange start and finish lengths patch by Ben Bromhead; reviewed by Aleksey Yeschenko for CASSANDRA-6521 --- CHANGES.txt | 1 + .../apache/cassandra/thrift/ThriftValidation.java | 12 +++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 6f6c1310d2..4eee4eef88 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -4,6 +4,7 @@ * Don't resubmit counter mutation runnables internally (CASSANDRA-6427) * Don't drop local mutations without a trace (CASSANDRA-6510) * Don't allow null max_hint_window_in_ms (CASSANDRA-6419) + * Validate SliceRange start and finish lengths (CASSANDRA-6521) 1.2.13 diff --git a/src/java/org/apache/cassandra/thrift/ThriftValidation.java b/src/java/org/apache/cassandra/thrift/ThriftValidation.java index 5882e27f54..442ea4ea11 100644 --- a/src/java/org/apache/cassandra/thrift/ThriftValidation.java +++ b/src/java/org/apache/cassandra/thrift/ThriftValidation.java @@ -228,6 +228,15 @@ public class ThriftValidation public static void validateRange(CFMetaData metadata, ColumnParent column_parent, SliceRange range) throws org.apache.cassandra.exceptions.InvalidRequestException { + if (range.count < 0) + throw new org.apache.cassandra.exceptions.InvalidRequestException("get_slice requires non-negative count"); + + if (range.start.remaining() > IColumn.MAX_NAME_LENGTH) + throw new org.apache.cassandra.exceptions.InvalidRequestException("range start length cannot be larger than " + IColumn.MAX_NAME_LENGTH); + + if (range.finish.remaining() > IColumn.MAX_NAME_LENGTH) + throw new org.apache.cassandra.exceptions.InvalidRequestException("range finish length cannot be larger than " + IColumn.MAX_NAME_LENGTH); + AbstractType comparator = metadata.getComparatorFor(column_parent.super_column); try { @@ -239,9 +248,6 @@ public class ThriftValidation throw new org.apache.cassandra.exceptions.InvalidRequestException(e.getMessage()); } - if (range.count < 0) - throw new org.apache.cassandra.exceptions.InvalidRequestException("get_slice requires non-negative count"); - Comparator orderedComparator = range.isReversed() ? comparator.reverseComparator : comparator; if (range.start.remaining() > 0 && range.finish.remaining() > 0