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