Varun Barala created CASSANDRA-14752:
----------------------------------------

             Summary: serializers/BooleanSerializer.java is using static 
bytebuffers which may cause problem for subsequent oeprations
                 Key: CASSANDRA-14752
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-14752
             Project: Cassandra
          Issue Type: Bug
          Components: Core
            Reporter: Varun Barala


[https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/serializers/BooleanSerializer.java#L26]
 It has two static Bytebuffer variables:-
{code:java}
private static final ByteBuffer TRUE = ByteBuffer.wrap(new byte[]{1});
private static final ByteBuffer FALSE = ByteBuffer.wrap(new byte[]{0});{code}
What will happen if the position of these Bytebuffers is being changed by some 
other operations? It'll affect other subsequent operations. IMO Using static is 
not a good idea here.

A potential place where it can become problematic: 
[https://github.com/apache/cassandra/blob/cassandra-2.1.13/src/java/org/apache/cassandra/db/marshal/AbstractCompositeType.java#L243]
 Since we are calling *`.remaining()`* It may give wrong results _i.e 0_ if 
these Bytebuffers have been used previously.

Solution: 
 
[https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/serializers/BooleanSerializer.java#L42]
 Every time we return new bytebuffer object. Please do let me know If there is 
a better way. I'd like to contribute. Thanks!!


{code:java}
public ByteBuffer serialize(Boolean value)
{
return (value == null) ? ByteBufferUtil.EMPTY_BYTE_BUFFER
: value ? ByteBuffer.wrap(new byte[] {1}) : ByteBuffer.wrap(new byte[] {0}); // 
false
}
{code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

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

Reply via email to