Skip to content

Commit a44b19e

Browse files
authored
Merge pull request #814 from GDATASoftwareAG/java/for_stream_0_bytes
Java/for stream 0 bytes
2 parents cb8a9c4 + 63d8497 commit a44b19e

File tree

2 files changed

+34
-7
lines changed

2 files changed

+34
-7
lines changed

java/src/main/java/de/gdata/vaas/Vaas.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ private static void throwInnerException(Exception e) throws VaasAuthenticationEx
118118
}
119119

120120
private CompletableFuture<VaasVerdict> sendUrlWithRetry(HttpClient httpClient, URI uri, String vaasRequestId) {
121-
return CreateHttpRequestBuilderWithHeaders(uri, vaasRequestId).thenCompose(request ->
121+
return createHttpRequestBuilderWithHeaders(uri, vaasRequestId).thenCompose(request ->
122122
httpClient.sendAsync(request.build(), HttpResponse.BodyHandlers.ofString())
123123
.thenCompose(handleException(response -> switch (response.statusCode()) {
124124
case 200 -> {
@@ -135,7 +135,7 @@ private CompletableFuture<VaasVerdict> sendUrlWithRetry(HttpClient httpClient, U
135135
}
136136

137137
private CompletableFuture<VaasVerdict> sendFileWithRetry(HttpClient httpClient, URI uri, String vaasRequestId) {
138-
return CreateHttpRequestBuilderWithHeaders(uri, vaasRequestId).thenCompose(request ->
138+
return createHttpRequestBuilderWithHeaders(uri, vaasRequestId).thenCompose(request ->
139139
httpClient.sendAsync(request.build(), HttpResponse.BodyHandlers.ofString())
140140
.thenCompose(handleException(response -> switch (response.statusCode()) {
141141
case 200 -> {
@@ -150,7 +150,7 @@ private CompletableFuture<VaasVerdict> sendFileWithRetry(HttpClient httpClient,
150150
})));
151151
}
152152

153-
private CompletableFuture<HttpRequest.Builder> CreateHttpRequestBuilderWithHeaders(URI uri, String requestId) {
153+
private CompletableFuture<HttpRequest.Builder> createHttpRequestBuilderWithHeaders(URI uri, String requestId) {
154154
return this.authenticator.getToken().thenApply(token -> {
155155
var httpRequestBuilder = HttpRequest.newBuilder()
156156
.uri(uri)
@@ -274,9 +274,10 @@ public CompletableFuture<VaasVerdict> forStreamAsync(InputStream inputStream, lo
274274
ForStreamOptions options) {
275275
var params = Map.of("useHashLookup", String.valueOf(options.isUseHashLookup()));
276276
var filesUri = this.config.getUrl() + "/files?" + encodeParams(params);
277-
var bodyPublisher = BodyPublishers.fromPublisher(BodyPublishers.ofInputStream(() -> inputStream),
278-
contentLength);
279-
return CreateHttpRequestBuilderWithHeaders(URI.create(filesUri), options.getVaasRequestId()).thenCompose(
277+
var bodyPublisher = contentLength > 0
278+
? BodyPublishers.fromPublisher(BodyPublishers.ofInputStream(() -> inputStream), contentLength)
279+
: BodyPublishers.noBody();
280+
return createHttpRequestBuilderWithHeaders(URI.create(filesUri), options.getVaasRequestId()).thenCompose(
280281
requestBuilder -> {
281282
var postRequest = requestBuilder
282283
.POST(bodyPublisher)
@@ -329,7 +330,7 @@ public CompletableFuture<VaasVerdict> forUrlAsync(URL url, ForUrlOptions options
329330
var params = Map.of("useHashLookup", String.valueOf(options.isUseHashLookup()));
330331
var urlsUri = this.config.getUrl() + "/urls";
331332
var urlAnalysisRequest = new UrlAnalysisRequest(url.toString(), options.isUseHashLookup());
332-
return CreateHttpRequestBuilderWithHeaders(URI.create(urlsUri), options.getVaasRequestId()).thenCompose(requestBuilder -> {
333+
return createHttpRequestBuilderWithHeaders(URI.create(urlsUri), options.getVaasRequestId()).thenCompose(requestBuilder -> {
333334
var postRequest = requestBuilder
334335
.POST(HttpRequest.BodyPublishers.ofString(UrlAnalysisRequest.ToJson(urlAnalysisRequest)))
335336
.header("Content-Type", "application/json")

java/src/test/java/de/gdata/test/integration/RealApiIntegrationTests.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,16 @@
2323
import org.junit.jupiter.params.provider.CsvSource;
2424
import org.mockito.ArgumentCaptor;
2525

26+
import java.io.ByteArrayInputStream;
2627
import java.io.ByteArrayOutputStream;
28+
import java.io.File;
2729
import java.io.IOException;
2830
import java.net.URI;
2931
import java.net.http.HttpClient;
3032
import java.net.http.HttpRequest;
3133
import java.net.http.HttpResponse;
3234
import java.nio.ByteBuffer;
35+
import java.nio.charset.StandardCharsets;
3336
import java.nio.file.Files;
3437
import java.nio.file.Path;
3538
import java.nio.file.StandardCopyOption;
@@ -732,6 +735,18 @@ public void forFile_BigFileWithSmallTimeout_ThrowsTimeoutException()
732735
assertInstanceOf(TimeoutException.class, exception.getCause());
733736
}
734737

738+
@Test
739+
public void forFile_EmptyFile_ReturnsVerdict() throws Exception {
740+
var file = new File(System.getProperty("java.io.tmpdir"), "empty.txt");
741+
file.createNewFile();
742+
743+
vaas = getVaasWithCredentials();
744+
var vaasVerdict = vaas.forFileAsync(file.toPath()).join();
745+
746+
assertEquals("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", vaasVerdict.getSha256());
747+
assertEquals(Verdict.CLEAN, vaasVerdict.getVerdict());
748+
}
749+
735750
@Test
736751
public void forStream_ReturnsVerdict() throws Exception {
737752
var url = URI.create(EICAR_URL).toURL();
@@ -1111,6 +1126,17 @@ public void forStream_BigFileWithSmallTimeout_ThrowsTimeoutException()
11111126
assertInstanceOf(TimeoutException.class, exception.getCause());
11121127
}
11131128

1129+
@Test
1130+
public void forStream_EmptyFile_ReturnsVerdict() throws Exception {
1131+
var stream = new ByteArrayInputStream("".getBytes(StandardCharsets.UTF_8));
1132+
1133+
vaas = getVaasWithCredentials();
1134+
var vaasVerdict = vaas.forStreamAsync(stream, 0).join();
1135+
1136+
assertEquals("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", vaasVerdict.getSha256());
1137+
assertEquals(Verdict.CLEAN, vaasVerdict.getVerdict());
1138+
}
1139+
11141140
@Test
11151141
public void forUrl_ReturnsVerdict() throws Exception {
11161142
var url = URI.create(EICAR_URL).toURL();

0 commit comments

Comments
 (0)