Github user NicoK commented on a diff in the pull request: https://github.com/apache/flink/pull/4592#discussion_r148212023 --- Diff: flink-runtime/src/main/java/org/apache/flink/runtime/io/network/netty/NettyMessage.java --- @@ -64,12 +65,53 @@ // ------------------------------------------------------------------------ + /** + * Allocates a new (header and contents) buffer and adds some header information for the frame + * decoder. + * + * <p>Before sending the buffer, you must write the actual length after adding the contents as + * an integer to position <tt>0</tt>! + * + * @param allocator + * byte buffer allocator to use + * @param id + * {@link NettyMessage} subclass ID + * + * @return a newly allocated direct buffer with header data written for {@link + * NettyMessageDecoder} + */ private static ByteBuf allocateBuffer(ByteBufAllocator allocator, byte id) { - return allocateBuffer(allocator, id, 0); + return allocateBuffer(allocator, id, -1); } + /** + * Allocates a new (header and contents) buffer and adds some header information for the frame + * decoder. + * + * <p>If the <tt>length</tt> is unknown, you must write the actual length after adding the + * contents as an integer to position <tt>0</tt>! + * + * @param allocator + * byte buffer allocator to use + * @param id + * {@link NettyMessage} subclass ID + * @param length + * content length (or <tt>-1</tt> if unknown) + * + * @return a newly allocated direct buffer with header data written for {@link + * NettyMessageDecoder} + */ private static ByteBuf allocateBuffer(ByteBufAllocator allocator, byte id, int length) { - final ByteBuf buffer = length != 0 ? allocator.directBuffer(HEADER_LENGTH + length) : allocator.directBuffer(); + Preconditions.checkArgument(length <= Integer.MAX_VALUE - HEADER_LENGTH); --- End diff -- why not...
---