Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8257736

InputStream from BodyPublishers.ofInputStream() leaks when IOE happens

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P4 P4
    • 17
    • 15, 16
    • core-libs
    • None
    • b06

      `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();
        }
      }
      ```

            ysuenaga Yasumasa Suenaga
            ysuenaga Yasumasa Suenaga
            Votes:
            0 Vote for this issue
            Watchers:
            6 Start watching this issue

              Created:
              Updated:
              Resolved: