`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

Reply via email to