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 <sylv...@datastax.com> Authored: Mon Feb 17 09:57:07 2014 +0100 Committer: Sylvain Lebresne <sylv...@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); } }