This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 3f2e8d1883 NPE in org.apache.cassandra.cql3.Attributes.getTimeToLive
3f2e8d1883 is described below

commit 3f2e8d1883c586bdb9cd7a23076ceaaeefa4bd8c
Author: David Capwell <dcapw...@apache.org>
AuthorDate: Wed Aug 17 09:47:17 2022 -0700

    NPE in org.apache.cassandra.cql3.Attributes.getTimeToLive
    
    patch by David Capwell; reviewed by Caleb Rackliffe for CASSANDRA-17822
---
 CHANGES.txt                                                   |  1 +
 src/java/org/apache/cassandra/cql3/Attributes.java            |  5 +++++
 .../cassandra/cql3/validation/operations/InsertTest.java      | 11 +++++++++++
 3 files changed, 17 insertions(+)

diff --git a/CHANGES.txt b/CHANGES.txt
index b8584c3506..9d7d61194b 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 4.2
+ * NPE in org.apache.cassandra.cql3.Attributes.getTimeToLive (CASSANDRA-17822)
  * Add guardrail for column size (CASSANDRA-17151)
  * When doing a host replacement, we need to check that the node is a live 
node before failing with "Cannot replace a live node..." (CASSANDRA-17805)
  * Add support to generate a One-Shot heap dump on unhandled exceptions 
(CASSANDRA-17795)
diff --git a/src/java/org/apache/cassandra/cql3/Attributes.java 
b/src/java/org/apache/cassandra/cql3/Attributes.java
index e841828d79..559882f725 100644
--- a/src/java/org/apache/cassandra/cql3/Attributes.java
+++ b/src/java/org/apache/cassandra/cql3/Attributes.java
@@ -117,6 +117,11 @@ public class Attributes
         if (tval == ByteBufferUtil.UNSET_BYTE_BUFFER)
             return metadata.params.defaultTimeToLive;
 
+        // byte[0] and null are the same for Int32Type.  UNSET_BYTE_BUFFER is 
also byte[0] but we rely on pointer
+        // identity, so need to check this after checking that
+        if (ByteBufferUtil.EMPTY_BYTE_BUFFER.equals(tval))
+            return 0;
+
         try
         {
             Int32Type.instance.validate(tval);
diff --git 
a/test/unit/org/apache/cassandra/cql3/validation/operations/InsertTest.java 
b/test/unit/org/apache/cassandra/cql3/validation/operations/InsertTest.java
index 0f01f3e3d4..0093764b0c 100644
--- a/test/unit/org/apache/cassandra/cql3/validation/operations/InsertTest.java
+++ b/test/unit/org/apache/cassandra/cql3/validation/operations/InsertTest.java
@@ -18,6 +18,8 @@
 
 package org.apache.cassandra.cql3.validation.operations;
 
+import java.nio.ByteBuffer;
+
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -29,6 +31,15 @@ import 
org.apache.cassandra.exceptions.InvalidRequestException;
 
 public class InsertTest extends CQLTester
 {
+    @Test
+    public void testEmptyTTL() throws Throwable
+    {
+        createTable("CREATE TABLE %s (k int PRIMARY KEY, v int)");
+        execute("INSERT INTO %s (k, v) VALUES (0, 0) USING TTL ?", (Object) 
null);
+        execute("INSERT INTO %s (k, v) VALUES (1, 1) USING TTL ?", 
ByteBuffer.wrap(new byte[0]));
+        assertRows(execute("SELECT k, v, ttl(v) FROM %s"), row(1, 1, null), 
row(0, 0, null));
+    }
+
     @Test
     public void testInsertWithUnset() throws Throwable
     {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to