8011135: (bf) CharBuffer.put(String) is slow because of String.charAt() call for each char

Brian Burkhalter brian.burkhalter at oracle.com
Thu Feb 21 17:49:50 UTC 2019


> On Feb 21, 2019, at 9:45 AM, Alan Bateman <Alan.Bateman at oracle.com> wrote:
> 
> On 21/02/2019 17:41, Brian Burkhalter wrote:
>> 
>>> There are a few other places in the heap buffers that also need to be hardened a bit (direct buffers of course need to much more careful).
>> 
>> Shall I try to include fixing those in this patch?
>> 
> Probably best to do it as a separate issue. I try to watch for these things with direct buffer classes as these could lead to any number of VM crashes or security issues. It's a less of concern with the heap buffers but would be good to fix if you have cycles.

Updated patch below. It’s a little unclear where to put ‘pos = position()’. I’ll file a separate issue for other hardening instances.

Thanks,

Brian

+#if[char]
+
+    public $Type$Buffer put(String src, int start, int end) {
+        int length = end - start;
+        checkBounds(start, length, src.length());
+        if (isReadOnly())
+            throw new ReadOnlyBufferException();
+        if (length > remaining())
+            throw new BufferOverflowException();
+        int pos = position();
+        src.getChars(start, end, hb, ix(pos));
+        position(pos + length);
+        return this;
+    }
+
+#end[char]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/nio-dev/attachments/20190221/79beced5/attachment.html>


More information about the nio-dev mailing list