You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by il...@apache.org on 2021/05/07 10:53:34 UTC
[ignite] branch master updated: IGNITE-14687 Fixed capacity check
in case of counter overflow - Fixes #9083.
This is an automated email from the ASF dual-hosted git repository.
ilyak pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push:
new 049ca70 IGNITE-14687 Fixed capacity check in case of counter overflow - Fixes #9083.
049ca70 is described below
commit 049ca7037ed6d148c848a9223b8a0cc9439a8ec6
Author: Sergey Kosarev <ma...@gmail.com>
AuthorDate: Fri May 7 13:32:25 2021 +0300
IGNITE-14687 Fixed capacity check in case of counter overflow - Fixes #9083.
Signed-off-by: Ilya Kasnacheev <il...@gmail.com>
---
.../internal/binary/streams/BinaryAbstractOutputStream.java | 6 +++---
.../ignite/internal/binary/streams/BinaryHeapOutputStream.java | 3 ++-
.../internal/binary/streams/BinaryOffheapOutputStream.java | 3 ++-
.../binary/streams/AbstractBinaryStreamByteOrderSelfTest.java | 5 +++++
.../internal/binary/streams/BinaryAbstractOutputStreamTest.java | 9 +++++++++
5 files changed, 21 insertions(+), 5 deletions(-)
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryAbstractOutputStream.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryAbstractOutputStream.java
index 023e71c..e87309d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryAbstractOutputStream.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryAbstractOutputStream.java
@@ -292,10 +292,10 @@ public abstract class BinaryAbstractOutputStream extends BinaryAbstractStream
protected static int capacity(int curCap, int reqCap) {
int newCap;
- if (reqCap < MIN_CAP)
- newCap = MIN_CAP;
- else if (reqCap > MAX_ARRAY_SIZE)
+ if (reqCap > MAX_ARRAY_SIZE || reqCap <= 0)
throw new IllegalArgumentException("Required capacity exceeds allowed. Required:" + reqCap);
+ else if (reqCap < MIN_CAP)
+ newCap = MIN_CAP;
else {
newCap = Math.max(curCap, MIN_CAP);
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryHeapOutputStream.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryHeapOutputStream.java
index 0f411b6..4a027e2 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryHeapOutputStream.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryHeapOutputStream.java
@@ -59,7 +59,8 @@ public final class BinaryHeapOutputStream extends BinaryAbstractOutputStream {
/** {@inheritDoc} */
@Override public void ensureCapacity(int cnt) {
- if (cnt > data.length) {
+ // overflow-conscious code
+ if (cnt - data.length > 0) {
int newCap = capacity(data.length, cnt);
data = chunk.reallocate(data, newCap);
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryOffheapOutputStream.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryOffheapOutputStream.java
index a782286..9fa7698 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryOffheapOutputStream.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryOffheapOutputStream.java
@@ -59,7 +59,8 @@ public class BinaryOffheapOutputStream extends BinaryAbstractOutputStream {
/** {@inheritDoc} */
@Override public void ensureCapacity(int cnt) {
- if (cnt > cap) {
+ // overflow-conscious code
+ if (cnt - cap > 0) {
int newCap = capacity(cap, cnt);
ptr = reallocate(ptr, newCap);
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/streams/AbstractBinaryStreamByteOrderSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/streams/AbstractBinaryStreamByteOrderSelfTest.java
index 7f83b88..973ef2f 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/binary/streams/AbstractBinaryStreamByteOrderSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/streams/AbstractBinaryStreamByteOrderSelfTest.java
@@ -406,6 +406,11 @@ public abstract class AbstractBinaryStreamByteOrderSelfTest extends GridCommonAb
Assert.assertArrayEquals(arr, in.readDoubleArray(ARR_LEN), 0);
}
+ @Test(expected = IllegalArgumentException.class)
+ public void testEnsureCapacityNegative() {
+ out.ensureCapacity(Integer.MIN_VALUE);
+ }
+
/**
*
*/
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/streams/BinaryAbstractOutputStreamTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/streams/BinaryAbstractOutputStreamTest.java
index 1040813..df44e28 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/binary/streams/BinaryAbstractOutputStreamTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/streams/BinaryAbstractOutputStreamTest.java
@@ -103,5 +103,14 @@ public class BinaryAbstractOutputStreamTest extends GridCommonAbstractTest {
catch (IllegalArgumentException ignored) {
// Expected exception.
}
+
+ try {
+ BinaryAbstractOutputStream.capacity(0, -1);
+
+ fail();
+ }
+ catch (IllegalArgumentException ignored) {
+ // Expected exception.
+ }
}
}