Fixed integer overflow DIRECTMEMORY-118 git-svn-id: https://svn.apache.org/repos/asf/directmemory/trunk@1421991 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/directmemory-cache/src/main/java/org/apache/directmemory/memory/allocator/MergingByteBufferAllocatorImpl.java b/directmemory-cache/src/main/java/org/apache/directmemory/memory/allocator/MergingByteBufferAllocatorImpl.java index 98d4b9b..e322fc1 100644 --- a/directmemory-cache/src/main/java/org/apache/directmemory/memory/allocator/MergingByteBufferAllocatorImpl.java +++ b/directmemory-cache/src/main/java/org/apache/directmemory/memory/allocator/MergingByteBufferAllocatorImpl.java
@@ -105,7 +105,7 @@ for ( Integer i : generateFreeSizesRange( totalSize ) ) { - freePointers.put( Integer.valueOf( i ), new LinkedHashSet<LinkedByteBuffer>() ); + freePointers.put( i, new LinkedHashSet<LinkedByteBuffer>() ); } initFirstBuffer(); @@ -132,20 +132,20 @@ * @param totalSize * @return a list of all size's level used by the allocator. */ - protected List<Integer> generateFreeSizesRange( final Integer totalSize ) + protected List<Integer> generateFreeSizesRange( final long totalSize ) { List<Integer> sizes = new ArrayList<Integer>(); - for ( int i = minSizeThreshold; i <= totalSize; i *= 8 ) + for ( long i = minSizeThreshold; i <= totalSize; i *= 8 ) { - sizes.add( Integer.valueOf( i ) ); + sizes.add( (int) i ); } // If totalSize < minSizeThreshold or totalSize is not a multiple of minSizeThreshold // we force adding an element to the map if ( sizes.isEmpty() || !sizes.contains( totalSize ) ) { - sizes.add( totalSize ); + sizes.add( (int) totalSize ); } return sizes;
diff --git a/directmemory-cache/src/test/java/org/apache/directmemory/memory/allocator/MergingByteBufferAllocatorImplTest.java b/directmemory-cache/src/test/java/org/apache/directmemory/memory/allocator/MergingByteBufferAllocatorImplTest.java index f5a1a18..5ecbf54 100644 --- a/directmemory-cache/src/test/java/org/apache/directmemory/memory/allocator/MergingByteBufferAllocatorImplTest.java +++ b/directmemory-cache/src/test/java/org/apache/directmemory/memory/allocator/MergingByteBufferAllocatorImplTest.java
@@ -19,11 +19,16 @@ * under the License. */ +import static org.junit.Assert.assertNotNull; + import java.io.IOException; import java.nio.BufferOverflowException; import junit.framework.Assert; +import org.apache.directmemory.DirectMemory; +import org.apache.directmemory.cache.CacheService; +import org.apache.directmemory.memory.MemoryManagerServiceImpl; import org.apache.directmemory.memory.buffer.MemoryBuffer; import org.junit.Test; @@ -199,4 +204,18 @@ } } + @Test + public void testJiraIssue118() + throws Exception + { + CacheService<String, Object> cacheService = new DirectMemory<String, Object>() + .setNumberOfBuffers(1) + .setInitialCapacity(1) + .setMemoryManager(new MemoryManagerServiceImpl<Object>(true)) + .setSize(350 *(1024*1024)) + .setConcurrencyLevel(1) + .newCacheService(); + assertNotNull(cacheService); + } + }