Skip to content
This repository was archived by the owner on Aug 7, 2025. It is now read-only.

Commit 34617bb

Browse files
Fix "direct buffer access" issue for Plugin SDK (#2511)
* Add test for direct buffer in request * Safely access request byte buffer * Fix formatting --------- Co-authored-by: Naman Nandan <namankt55@gmail.com>
1 parent 53ff6a5 commit 34617bb

File tree

3 files changed

+29
-1
lines changed

3 files changed

+29
-1
lines changed

frontend/server/src/main/java/org/pytorch/serve/servingsdk/impl/ModelServerRequest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.util.List;
99
import java.util.Map;
1010
import org.pytorch.serve.servingsdk.http.Request;
11+
import org.pytorch.serve.util.NettyUtils;
1112

1213
public class ModelServerRequest implements Request {
1314
private FullHttpRequest req;
@@ -45,6 +46,6 @@ public String getContentType() {
4546

4647
@Override
4748
public ByteArrayInputStream getInputStream() {
48-
return new ByteArrayInputStream(req.content().array());
49+
return new ByteArrayInputStream(NettyUtils.getBytes(req.content()));
4950
}
5051
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package org.pytorch.serve.util;
2+
3+
import io.netty.buffer.ByteBuf;
4+
import io.netty.buffer.Unpooled;
5+
import io.netty.handler.codec.http.*;
6+
import java.io.BufferedReader;
7+
import java.io.IOException;
8+
import java.io.InputStreamReader;
9+
import org.pytorch.serve.servingsdk.http.Request;
10+
import org.pytorch.serve.servingsdk.impl.ModelServerRequest;
11+
import org.testng.Assert;
12+
import org.testng.annotations.Test;
13+
14+
public class PluginSdkTest {
15+
@Test
16+
public void testReadRequestBodyFromPlugin() throws IOException {
17+
ByteBuf buf = Unpooled.directBuffer();
18+
buf.writeBytes("test".getBytes());
19+
FullHttpRequest req =
20+
new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST, "", buf);
21+
Request request = new ModelServerRequest(req, new QueryStringDecoder(""));
22+
String line =
23+
new BufferedReader(new InputStreamReader(request.getInputStream())).readLine();
24+
Assert.assertEquals(line, "test");
25+
}
26+
}

frontend/server/testng.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
<classes>
66
<class name="org.pytorch.serve.util.ConfigManagerTest"/>
77
<class name="org.pytorch.serve.util.ConnectorTest"/>
8+
<class name="org.pytorch.serve.util.PluginSdkTest"/>
89
<class name="org.pytorch.serve.CoverageTest"/>
910
<class name="org.pytorch.serve.ModelServerTest"/>
1011
<class name="org.pytorch.serve.SnapshotTest"/>

0 commit comments

Comments
 (0)