From c66a17452c669228da6333f44e3af268e0163492 Mon Sep 17 00:00:00 2001 From: MelanX Date: Mon, 11 Apr 2022 20:33:16 +0200 Subject: [PATCH] fix integer overflow resulting in item lose --- .../apiimpl/storage/disk/FluidStorageDisk.java | 5 +++-- .../apiimpl/storage/disk/ItemStorageDisk.java | 7 ++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/FluidStorageDisk.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/FluidStorageDisk.java index c692e8d70..a3170a836 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/FluidStorageDisk.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/FluidStorageDisk.java @@ -95,13 +95,14 @@ public class FluidStorageDisk implements IStorageDisk { return StackUtils.copy(otherStack, size - remainingSpace); } else { + int maxConsumable = Math.min(size, Integer.MAX_VALUE - otherStack.getAmount()); if (action == Action.PERFORM) { - otherStack.grow(size); + otherStack.grow(maxConsumable); onChanged(); } - return FluidStack.EMPTY; + return StackUtils.copy(otherStack, size - maxConsumable); } } } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/ItemStorageDisk.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/ItemStorageDisk.java index 27b30daa9..cea7e2326 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/ItemStorageDisk.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/ItemStorageDisk.java @@ -102,14 +102,15 @@ public class ItemStorageDisk implements IStorageDisk { return ItemHandlerHelper.copyStackWithSize(otherStack, size - remainingSpace); } else { + int maxConsumable = Math.min(size, Integer.MAX_VALUE - otherStack.getCount()); if (action == Action.PERFORM) { - otherStack.grow(size); - itemCount += size; + otherStack.grow(maxConsumable); + itemCount += maxConsumable; onChanged(); } - return ItemStack.EMPTY; + return ItemHandlerHelper.copyStackWithSize(otherStack, size - maxConsumable); } } }