diff --git a/src/main/java/org/jboss/netty/handler/codec/protobuf/ProtobufDecoder.java b/src/main/java/org/jboss/netty/handler/codec/protobuf/ProtobufDecoder.java index 37ea9ba30b..5aca2d4e86 100644 --- a/src/main/java/org/jboss/netty/handler/codec/protobuf/ProtobufDecoder.java +++ b/src/main/java/org/jboss/netty/handler/codec/protobuf/ProtobufDecoder.java @@ -97,13 +97,23 @@ public class ProtobufDecoder extends OneToOneDecoder { return msg; } - if (extensionRegistry == null) { - return prototype.newBuilderForType().mergeFrom( - new ChannelBufferInputStream((ChannelBuffer) msg)).build(); + ChannelBuffer buf = (ChannelBuffer) msg; + if (buf.hasArray()) { + if(extensionRegistry == null) { + return prototype.newBuilderForType().mergeFrom( + buf.array(),buf.arrayOffset(), buf.readableBytes()).build(); + } else { + return prototype.newBuilderForType().mergeFrom( + buf.array(), buf.arrayOffset(), buf.readableBytes(), extensionRegistry).build(); + } } else { - return prototype.newBuilderForType().mergeFrom( - new ChannelBufferInputStream((ChannelBuffer) msg), - extensionRegistry).build(); + if (extensionRegistry == null) { + return prototype.newBuilderForType().mergeFrom( + new ChannelBufferInputStream((ChannelBuffer) msg)).build(); + } else { + return prototype.newBuilderForType().mergeFrom( + new ChannelBufferInputStream((ChannelBuffer) msg), extensionRegistry).build(); + } } } }