From c5733742cea6418bd712646a8fc7f35bb1e2f953 Mon Sep 17 00:00:00 2001 From: Jakob Buchgraber Date: Thu, 30 Jun 2016 16:28:45 +0200 Subject: [PATCH] netty: fix incorrect usage of AsciString. An AsciiString object may only use a subsection of its backing byte array. We need to test for this and return a copy of the subsection if necessary. Big thanks to @normanmaurer for uncovering this issue: https://github.com/netty/netty/issues/5472 --- netty/src/main/java/io/grpc/netty/Utils.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/netty/src/main/java/io/grpc/netty/Utils.java b/netty/src/main/java/io/grpc/netty/Utils.java index bfa5520828..af9f7ebd59 100644 --- a/netty/src/main/java/io/grpc/netty/Utils.java +++ b/netty/src/main/java/io/grpc/netty/Utils.java @@ -106,8 +106,9 @@ class Utils { private static byte[] bytes(CharSequence seq) { if (seq instanceof AsciiString) { - // Fast path - no copy. - return ((AsciiString) seq).array(); + // Fast path - sometimes copy. + AsciiString str = (AsciiString) seq; + return str.isEntireArrayUsed() ? str.array() : str.toByteArray(); } // Slow path - copy. return seq.toString().getBytes(UTF_8);