From b0dfb4cdc4717a4ba759cc3353e29cc76235d74e Mon Sep 17 00:00:00 2001 From: Sylvain Lebresne Date: Thu, 29 Mar 2012 16:26:53 +0200 Subject: [PATCH] fix NPE on invalid CQL DELETE command patch by dbrosius; reviewed by slebresne for CASSANDRA-3755 --- CHANGES.txt | 1 + src/java/org/apache/cassandra/cql/DeleteStatement.java | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index c92a2421bd..e4d207c1d4 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -13,6 +13,7 @@ * fix race leading to super columns assertion failure (CASSANDRA-3957) * ensure that directory is selected for compaction for user-defined tasks and upgradesstables (CASSANDRA-3985) + * fix NPE on invalid CQL delete command (CASSANDRA-3755) 1.0.8 diff --git a/src/java/org/apache/cassandra/cql/DeleteStatement.java b/src/java/org/apache/cassandra/cql/DeleteStatement.java index eb46076051..1b33a01bf5 100644 --- a/src/java/org/apache/cassandra/cql/DeleteStatement.java +++ b/src/java/org/apache/cassandra/cql/DeleteStatement.java @@ -74,6 +74,8 @@ public class DeleteStatement extends AbstractModification /** {@inheritDoc} */ public List prepareRowMutations(String keyspace, ClientState clientState, Long timestamp) throws InvalidRequestException { + CFMetaData metadata = validateColumnFamily(keyspace, columnFamily); + clientState.hasColumnFamilyAccess(columnFamily, Permission.WRITE); AbstractType keyType = Schema.instance.getCFMetaData(keyspace, columnFamily).getKeyValidator(); @@ -81,18 +83,17 @@ public class DeleteStatement extends AbstractModification for (Term key : keys) { - rowMutations.add(mutationForKey(key.getByteBuffer(keyType), keyspace, timestamp, clientState)); + rowMutations.add(mutationForKey(key.getByteBuffer(keyType), keyspace, timestamp, clientState, metadata)); } return rowMutations; } /** {@inheritDoc} */ - public RowMutation mutationForKey(ByteBuffer key, String keyspace, Long timestamp, ClientState clientState) throws InvalidRequestException + public RowMutation mutationForKey(ByteBuffer key, String keyspace, Long timestamp, ClientState clientState, CFMetaData metadata) throws InvalidRequestException { RowMutation rm = new RowMutation(keyspace, key); - CFMetaData metadata = validateColumnFamily(keyspace, columnFamily); QueryProcessor.validateKeyAlias(metadata, keyName); AbstractType comparator = metadata.getComparatorFor(null);