This is an automated email from the ASF dual-hosted git repository.

adoroszlai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ratis.git


The following commit(s) were added to refs/heads/master by this push:
     new a29d3d825 RATIS-1837. Restrict reading maxChunkSize bytes each 
installSnapshot RPC (#877)
a29d3d825 is described below

commit a29d3d825fe0630e45e427dbf9f15173a960d2b9
Author: William Song <[email protected]>
AuthorDate: Thu Apr 27 14:58:41 2023 +0800

    RATIS-1837. Restrict reading maxChunkSize bytes each installSnapshot RPC 
(#877)
---
 .../main/java/org/apache/ratis/server/storage/FileChunkReader.java  | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git 
a/ratis-server/src/main/java/org/apache/ratis/server/storage/FileChunkReader.java
 
b/ratis-server/src/main/java/org/apache/ratis/server/storage/FileChunkReader.java
index 47d70a771..dfed2790f 100644
--- 
a/ratis-server/src/main/java/org/apache/ratis/server/storage/FileChunkReader.java
+++ 
b/ratis-server/src/main/java/org/apache/ratis/server/storage/FileChunkReader.java
@@ -20,6 +20,8 @@ package org.apache.ratis.server.storage;
 import org.apache.ratis.io.MD5Hash;
 import org.apache.ratis.proto.RaftProtos.FileChunkProto;
 import org.apache.ratis.thirdparty.com.google.protobuf.ByteString;
+import org.apache.ratis.thirdparty.com.google.protobuf.UnsafeByteOperations;
+import org.apache.ratis.util.IOUtils;
 import org.apache.ratis.util.JavaUtils;
 
 import java.io.Closeable;
@@ -72,7 +74,9 @@ public class FileChunkReader implements Closeable {
   public FileChunkProto readFileChunk(int chunkMaxSize) throws IOException {
     final long remaining = info.getFileSize() - offset;
     final int chunkLength = remaining < chunkMaxSize ? (int) remaining : 
chunkMaxSize;
-    final ByteString data = ByteString.readFrom(in, chunkLength);
+    final byte[] chunkBuffer = new byte[chunkLength];
+    IOUtils.readFully(in, chunkBuffer, 0, chunkBuffer.length);
+    final ByteString data = UnsafeByteOperations.unsafeWrap(chunkBuffer);
     // whether this chunk is the last chunk of current file
     final boolean isDone = offset + chunkLength == info.getFileSize();
     final ByteString fileDigest;

Reply via email to