Skip to content

Commit a68c379

Browse files
committed
Fixed bug in output stream that was causing large files to be written incorrectly.
1 parent b7c8320 commit a68c379

File tree

3 files changed

+39
-2
lines changed

3 files changed

+39
-2
lines changed

Diff for: src/main/java/io/fusionauth/http/io/ChunkedOutputStream.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ public void write(byte[] b) throws IOException {
8282
public void write(byte[] b, int offset, int length) throws IOException {
8383
int index = offset;
8484
while (index < length) {
85-
int wrote = Math.min(buffer.length - bufferIndex, length);
86-
System.arraycopy(b, 0, buffer, bufferIndex, wrote);
85+
int wrote = Math.min(buffer.length - bufferIndex, length - index);
86+
System.arraycopy(b, index, buffer, bufferIndex, wrote);
8787
bufferIndex += wrote;
8888
index += wrote;
8989

Diff for: src/test/java/io/fusionauth/http/CoreTest.java

+31
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import java.net.http.HttpRequest.BodyPublishers;
2727
import java.net.http.HttpResponse.BodySubscribers;
2828
import java.nio.charset.StandardCharsets;
29+
import java.nio.file.Files;
30+
import java.nio.file.Paths;
2931
import java.security.SecureRandom;
3032
import java.security.cert.Certificate;
3133
import java.time.Duration;
@@ -319,6 +321,35 @@ public void keepAliveTimeout() {
319321
}
320322
}
321323

324+
@Test(dataProvider = "schemes")
325+
public void largeCSS(String scheme) throws Exception {
326+
var css = Files.readString(Paths.get("src/test/resources/fontawesome-6.0.0.min.css"), StandardCharsets.UTF_8);
327+
328+
HTTPHandler handler = (req, res) -> {
329+
res.setStatus(200);
330+
331+
try {
332+
var out = res.getOutputStream();
333+
out.write(css.getBytes(StandardCharsets.UTF_8));
334+
out.close();
335+
} catch (Throwable t) {
336+
System.out.println(t);
337+
}
338+
};
339+
340+
try (var client = makeClient(scheme, null); var ignore = makeServer(scheme, handler).start()) {
341+
URI uri = makeURI(scheme, "");
342+
HttpRequest request = HttpRequest.newBuilder()
343+
.uri(uri)
344+
.GET()
345+
.build();
346+
347+
var response = client.send(request, r -> BodySubscribers.ofString(StandardCharsets.UTF_8));
348+
assertEquals(response.statusCode(), 200);
349+
assertEquals(response.body(), css);
350+
}
351+
}
352+
322353
@Test
323354
public void logger() {
324355
// Test replacement values and ensure we are handling special regex characters.

Diff for: src/test/resources/fontawesome-6.0.0.min.css

+6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)