Hi everyone,
I'm afraid I've found a bug in commons.collection.buffer.UnboundedFifoBuffer
If someone else already spotted it, sorry for that : I didn't find it in the bug list.
When removing an object from an UnboundedFifoBuffer via its iterator method,
I can get an "ArrayIndexOutOfBoundException -1".
Here is the faulty code :
int i = lastReturnedIndex + 1;
while (i != tail) {
if (i >= buffer.length) {
buffer[i - 1] = buffer[0];
i = 0; // This will throw an exception at the next loop
} else {
buffer[i - 1] = buffer[i]; // The exception may be thrown here
i++;
}
}
If i >= buffer.length, then i is set to 0, and the next time in the loop, we will try
to assign buffer[i - 1].
My solution :
int i = index;
while (i != tail) {
if (i == 0) {
buffer[buffer.length-1] = buffer[0];
i = 1;
} else {
buffer[i - 1] = buffer[i];
i = increment(i);
}
}
Attached is a patch file...
Thanks
Luc
--- UnboundedFifoBuffer.java.orig 2004-11-05 14:16:57.000000000 +0100
+++ UnboundedFifoBuffer.java 2004-11-05 14:16:19.000000000 +0100
@@ -303,14 +303,14 @@
}
// Other elements require us to shift the subsequent elements
- int i = lastReturnedIndex + 1;
+ int i = index;
while (i != tail) {
- if (i >= buffer.length) {
- buffer[i - 1] = buffer[0];
- i = 0;
+ if (i == 0) {
+ buffer[buffer.length - 1] = buffer[0];
+ i = 1;
} else {
buffer[i - 1] = buffer[i];
- i++;
+ i = increment(i);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]