Bug in java.nio.StringCharBuffer.slice
Alan Bateman
Alan.Bateman at oracle.com
Wed Nov 17 19:39:50 UTC 2010
John Platts wrote:
> Here is the current implementation of slice in
> java.nio.StringCharBuffer (as found in OpenJDK 7):
> 44 public CharBuffer slice() {
> 45 return new StringCharBuffer(str,
> 46 -1,
> 47 0,
> 48 this.remaining(),
> 49 this.remaining(),
> 50 this.position());
> 51 }
>
> Here is the implementation of slice used for heap-based byte buffers,
> which is found in java/nio/Heap-X-Buffer.java.template:
> 97 public $Type$Buffer slice() {
> 98 return new Heap$Type$Buffer$RW$(hb,
> 99 -1,
> 100 0,
> 101 this.remaining(),
> 102 this.remaining(),
> 103 this.position() + offset);
> 104 }
>
> It appears that the slice() method fails to return the correct region
> of the string for CharBuffer objects that wrap a string whenever
> offset is non-zero. Here is the corrected code, with the correction in
> red:
> 44 public CharBuffer slice() {
> 45 return new StringCharBuffer(str,
> 46 -1,
> 47 0,
> 48 this.remaining(),
> 49 this.remaining(),
> 50 offset + this.position());
> 51 }
>
> Is this bug limited to OpenJDK 7, or is this bug found in OpenJDK 6,
> JDK 6, JDK 5, and JDK 1.4? This bug might be affecting code that uses
> CharBuffers.
Thanks for the bug report. I've created a bug to track it:
7000913: (bf) CharBuffer.wrap, slice, position, slice leads to
CharBuffer with incorrect offset
I'm kinda surprised this hasn't been noticed before but it may be that
it's rare to slice a buffer that itself was created by slicing a wrapped
char sequence. It does highlight a hole in our tests so part of fixing
this will adding further tests.
So are you contributing the fix to this? I see a John Platts on the SCA
list but I'm not sure if that is you.
As regards versions, then it is likely to exist in all versions.
-Alan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/core-libs-dev/attachments/20101117/27f055bc/attachment.html>
More information about the core-libs-dev
mailing list