LocalToken ensures object buffer is on heap

Patch by Sam Tunnicliffe; reviewed by Alex Petrov for CASSANDRA-12651


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

Branch: refs/heads/cassandra-3.11
Commit: 820e7a8d810828d29f98a68dc35be33b40a5de62
Parents: 7dd609c
Author: Sam Tunnicliffe <s...@beobal.com>
Authored: Thu Nov 17 16:42:19 2016 +0000
Committer: Sam Tunnicliffe <s...@beobal.com>
Committed: Tue Nov 29 16:56:37 2016 +0000

----------------------------------------------------------------------
 CHANGES.txt                                             |  1 +
 src/java/org/apache/cassandra/dht/LocalPartitioner.java | 10 ++++++++--
 2 files changed, 9 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/820e7a8d/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index a2c552e..b77d84a 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 3.0.11
+ * LocalToken ensures token values are cloned on heap (CASSANDRA-12651)
  * AnticompactionRequestSerializer serializedSize is incorrect 
(CASSANDRA-12934)
  * Prevent reloading of logback.xml from UDF sandbox (CASSANDRA-12535)
 Merged from 2.2:

http://git-wip-us.apache.org/repos/asf/cassandra/blob/820e7a8d/src/java/org/apache/cassandra/dht/LocalPartitioner.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/dht/LocalPartitioner.java 
b/src/java/org/apache/cassandra/dht/LocalPartitioner.java
index f9421c5..aaf2569 100644
--- a/src/java/org/apache/cassandra/dht/LocalPartitioner.java
+++ b/src/java/org/apache/cassandra/dht/LocalPartitioner.java
@@ -27,10 +27,11 @@ import org.apache.cassandra.db.CachedHashDecoratedKey;
 import org.apache.cassandra.db.marshal.AbstractType;
 import org.apache.cassandra.utils.ByteBufferUtil;
 import org.apache.cassandra.utils.ObjectSizes;
+import org.apache.cassandra.utils.memory.HeapAllocator;
 
 public class LocalPartitioner implements IPartitioner
 {
-    private static final long EMPTY_SIZE = ObjectSizes.measure(new 
LocalPartitioner(null).new LocalToken(null));
+    private static final long EMPTY_SIZE = ObjectSizes.measure(new 
LocalPartitioner(null).new LocalToken());
 
     final AbstractType<?> comparator;   // package-private to avoid access 
workarounds in embedded LocalToken.
 
@@ -121,9 +122,14 @@ public class LocalPartitioner implements IPartitioner
     {
         static final long serialVersionUID = 8437543776403014875L;
 
+        private LocalToken()
+        {
+            super(null);
+        }
+
         public LocalToken(ByteBuffer token)
         {
-            super(token);
+            super(HeapAllocator.instance.clone(token));
         }
 
         @Override

Reply via email to