From 0171ff6a01a3d5bccf6fb96517cd676545f7a0e6 Mon Sep 17 00:00:00 2001 From: kezhenxu94 Date: Fri, 2 Oct 2020 19:53:48 +0800 Subject: [PATCH] Promote Integer to Long before multiplying to avoid numeric overflow (#5602) --- .../apm/commons/datacarrier/buffer/Channels.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/apm-commons/apm-datacarrier/src/main/java/org/apache/skywalking/apm/commons/datacarrier/buffer/Channels.java b/apm-commons/apm-datacarrier/src/main/java/org/apache/skywalking/apm/commons/datacarrier/buffer/Channels.java index 26c7ab03c..b9ad4fd77 100644 --- a/apm-commons/apm-datacarrier/src/main/java/org/apache/skywalking/apm/commons/datacarrier/buffer/Channels.java +++ b/apm-commons/apm-datacarrier/src/main/java/org/apache/skywalking/apm/commons/datacarrier/buffer/Channels.java @@ -27,7 +27,7 @@ import org.apache.skywalking.apm.commons.datacarrier.partition.IDataPartitioner; public class Channels { private final QueueBuffer[] bufferChannels; private IDataPartitioner dataPartitioner; - private BufferStrategy strategy; + private final BufferStrategy strategy; private final long size; public Channels(int channelSize, int bufferSize, IDataPartitioner partitioner, BufferStrategy strategy) { @@ -36,12 +36,13 @@ public class Channels { bufferChannels = new QueueBuffer[channelSize]; for (int i = 0; i < channelSize; i++) { if (BufferStrategy.BLOCKING.equals(strategy)) { - bufferChannels[i] = new ArrayBlockingQueueBuffer(bufferSize, strategy); + bufferChannels[i] = new ArrayBlockingQueueBuffer<>(bufferSize, strategy); } else { - bufferChannels[i] = new Buffer(bufferSize, strategy); + bufferChannels[i] = new Buffer<>(bufferSize, strategy); } } - size = channelSize * bufferSize; + // noinspection PointlessArithmeticExpression + size = 1L * channelSize * bufferSize; // it's not pointless, it prevents numeric overflow before assigning an integer to a long } public boolean save(T data) {