You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by kr...@apache.org on 2011/05/16 12:39:22 UTC
svn commit: r1103681 -
/db/derby/code/trunk/java/engine/org/apache/derby/impl/io/vfmem/BlockedByteArray.java
Author: kristwaa
Date: Mon May 16 10:39:22 2011
New Revision: 1103681
URL: http://svn.apache.org/viewvc?rev=1103681&view=rev
Log:
DERBY-5098: embedded/in-memory: SQLNonTransientConnectionException: No current connection due to invalid page format
Fix int overflows.
The bug caused the in-memory backend to overwrite existing data when the
virtual file/conglomerate grew big enough.
Patch file: derby-5098-1a-overflow_fixes.diff
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/impl/io/vfmem/BlockedByteArray.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/io/vfmem/BlockedByteArray.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/io/vfmem/BlockedByteArray.java?rev=1103681&r1=1103680&r2=1103681&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/io/vfmem/BlockedByteArray.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/io/vfmem/BlockedByteArray.java Mon May 16 10:39:22 2011
@@ -143,7 +143,7 @@ public class BlockedByteArray {
if (blockSize == 0) {
checkBlockSize((int)Math.min(Integer.MAX_VALUE, newLength));
}
- final long currentCapacity = allocatedBlocks * blockSize;
+ final long currentCapacity = (long)allocatedBlocks * blockSize;
if (newLength > currentCapacity) {
// Allocate more blocks.
increaseCapacity(newLength);
@@ -187,7 +187,7 @@ public class BlockedByteArray {
throw new ArrayIndexOutOfBoundsException(len);
}
// Increase the capacity if required.
- if (pos + len >= allocatedBlocks * blockSize) {
+ if (pos + len >= (long)allocatedBlocks * blockSize) {
increaseCapacity(pos + len);
}
// Calculate the block number and the index within this block.
@@ -226,7 +226,7 @@ public class BlockedByteArray {
checkBlockSize(0);
}
// Increase the capacity if required.
- if (pos >= allocatedBlocks * blockSize) {
+ if (pos >= (long)allocatedBlocks * blockSize) {
increaseCapacity(pos);
}
@@ -301,7 +301,7 @@ public class BlockedByteArray {
SanityManager.ASSERT(blockSize > 0, "Invalid/unset block size");
}
// Safe-guard to avoid overwriting existing data.
- if (lastIndex < allocatedBlocks * blockSize) {
+ if (lastIndex < (long)allocatedBlocks * blockSize) {
return;
}
// Calculate required number of blocks, and create those lacking.