You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sl...@apache.org on 2014/02/17 09:57:20 UTC

git commit: Properly validate cellname max size in CQL3

Repository: cassandra
Updated Branches:
  refs/heads/trunk 110990401 -> 9ea99491e


Properly validate cellname max size in CQL3


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/9ea99491
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/9ea99491
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/9ea99491

Branch: refs/heads/trunk
Commit: 9ea99491e846db82777bfdc740e409b827c07238
Parents: 1109904
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Mon Feb 17 09:57:07 2014 +0100
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Mon Feb 17 09:57:18 2014 +0100

----------------------------------------------------------------------
 .../org/apache/cassandra/cql3/QueryProcessor.java | 18 +++++++++---------
 .../apache/cassandra/cql3/UpdateParameters.java   | 12 ++++++------
 .../cql3/statements/SelectStatement.java          |  2 +-
 3 files changed, 16 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/9ea99491/src/java/org/apache/cassandra/cql3/QueryProcessor.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/QueryProcessor.java b/src/java/org/apache/cassandra/cql3/QueryProcessor.java
index 7035f63..f2559e6 100644
--- a/src/java/org/apache/cassandra/cql3/QueryProcessor.java
+++ b/src/java/org/apache/cassandra/cql3/QueryProcessor.java
@@ -34,8 +34,7 @@ import org.apache.cassandra.cql3.hooks.*;
 import org.apache.cassandra.cql3.statements.*;
 import org.apache.cassandra.transport.messages.ResultMessage;
 import org.apache.cassandra.db.*;
-import org.apache.cassandra.db.composites.CellName;
-import org.apache.cassandra.db.composites.Composite;
+import org.apache.cassandra.db.composites.*;
 import org.apache.cassandra.exceptions.*;
 import org.apache.cassandra.service.ClientState;
 import org.apache.cassandra.service.QueryState;
@@ -145,24 +144,25 @@ public class QueryProcessor
         }
     }
 
-    public static void validateCellNames(Iterable<CellName> cellNames) throws InvalidRequestException
+    public static void validateCellNames(Iterable<CellName> cellNames, CellNameType type) throws InvalidRequestException
     {
         for (CellName name : cellNames)
-            validateCellName(name);
+            validateCellName(name, type);
     }
 
-    public static void validateCellName(CellName name) throws InvalidRequestException
+    public static void validateCellName(CellName name, CellNameType type) throws InvalidRequestException
     {
-        validateComposite(name);
+        validateComposite(name, type);
         if (name.isEmpty())
             throw new InvalidRequestException("Invalid empty value for clustering column of COMPACT TABLE");
     }
 
-    public static void validateComposite(Composite name) throws InvalidRequestException
+    public static void validateComposite(Composite name, CType type) throws InvalidRequestException
     {
-        if (name.dataSize() > Cell.MAX_NAME_LENGTH)
+        long serializedSize = type.serializer().serializedSize(name, TypeSizes.NATIVE);
+        if (serializedSize > Cell.MAX_NAME_LENGTH)
             throw new InvalidRequestException(String.format("The sum of all clustering columns is too long (%s > %s)",
-                                                            name.dataSize(),
+                                                            serializedSize,
                                                             Cell.MAX_NAME_LENGTH));
     }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/9ea99491/src/java/org/apache/cassandra/cql3/UpdateParameters.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/UpdateParameters.java b/src/java/org/apache/cassandra/cql3/UpdateParameters.java
index a3553f4..87ce22e 100644
--- a/src/java/org/apache/cassandra/cql3/UpdateParameters.java
+++ b/src/java/org/apache/cassandra/cql3/UpdateParameters.java
@@ -54,27 +54,27 @@ public class UpdateParameters
 
     public Cell makeColumn(CellName name, ByteBuffer value) throws InvalidRequestException
     {
-        QueryProcessor.validateCellName(name);
+        QueryProcessor.validateCellName(name, metadata.comparator);
         return Cell.create(name, value, timestamp, ttl, metadata);
     }
 
     public Cell makeTombstone(CellName name) throws InvalidRequestException
     {
-        QueryProcessor.validateCellName(name);
+        QueryProcessor.validateCellName(name, metadata.comparator);
         return new DeletedCell(name, localDeletionTime, timestamp);
     }
 
     public RangeTombstone makeRangeTombstone(ColumnSlice slice) throws InvalidRequestException
     {
-        QueryProcessor.validateComposite(slice.start);
-        QueryProcessor.validateComposite(slice.finish);
+        QueryProcessor.validateComposite(slice.start, metadata.comparator);
+        QueryProcessor.validateComposite(slice.finish, metadata.comparator);
         return new RangeTombstone(slice.start, slice.finish, timestamp, localDeletionTime);
     }
 
     public RangeTombstone makeTombstoneForOverwrite(ColumnSlice slice) throws InvalidRequestException
     {
-        QueryProcessor.validateComposite(slice.start);
-        QueryProcessor.validateComposite(slice.finish);
+        QueryProcessor.validateComposite(slice.start, metadata.comparator);
+        QueryProcessor.validateComposite(slice.finish, metadata.comparator);
         return new RangeTombstone(slice.start, slice.finish, timestamp - 1, localDeletionTime);
     }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/9ea99491/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java b/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
index e2ccda1..5622e40 100644
--- a/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
@@ -411,7 +411,7 @@ public class SelectStatement implements CQLStatement, MeasurableForPreparedCache
             SortedSet<CellName> cellNames = getRequestedColumns(variables);
             if (cellNames == null) // in case of IN () for the last column of the key
                 return null;
-            QueryProcessor.validateCellNames(cellNames);
+            QueryProcessor.validateCellNames(cellNames, cfm.comparator);
             return new NamesQueryFilter(cellNames, true);
         }
     }