`InputStream` from `BodyPublishers.ofInputStream()` is usually closed when the stream reaches EOF. However IOE handler returns without closing.
I confirmed this problem in `BodyPublishers.ofInputStream()`, but I think `BodyPublishers.ofFile()`has same problem because it also use `StreamIterator`as well as `ofInputStream()`. # How to reproduce: Following code (Test.java) attempts to post body from `TestInputStream` which throws IOE in `read()`. "close called" is shown on the console if `close()` is called. import java.io.*; import java.net.*; import java.net.http.*; public class Test{ private static class TestInputStream extends InputStream{ public TestInputStream(){ super(); System.out.println("test c'tor"); } @Override public int read() throws IOException{ System.out.println("read called"); throw new IOException("test"); } @Override public void close() throws IOException{ System.out.println("close called"); super.close(); } } public static void main(String[] args) throws Exception{ var http = HttpClient.newHttpClient(); var request = HttpRequest.newBuilder() .uri(URI.create("http://httpbin.org/post")) .POST(HttpRequest.BodyPublishers.ofInputStream(() -> new TestInputStream())) .build(); http.send(request, HttpResponse.BodyHandlers.discarding()); System.out.println("Press any key to exit..."); System.in.read(); } } ------------- Commit messages: - 8257736: InputStream from BodyPublishers.ofInputStream() leaks when IOE happens Changes: https://git.openjdk.java.net/jdk/pull/1614/files Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=1614&range=00 Issue: https://bugs.openjdk.java.net/browse/JDK-8257736 Stats: 5 lines in 1 file changed: 5 ins; 0 del; 0 mod Patch: https://git.openjdk.java.net/jdk/pull/1614.diff Fetch: git fetch https://git.openjdk.java.net/jdk pull/1614/head:pull/1614 PR: https://git.openjdk.java.net/jdk/pull/1614