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);
+    }
+
 }