]> source.dussan.org Git - jgit.git/commitdiff
Fix unclosed resource warning in SmartOutputStream 12/155212/2
authorMatthias Sohn <matthias.sohn@sap.com>
Sat, 4 Jan 2020 16:03:52 +0000 (17:03 +0100)
committerMatthias Sohn <matthias.sohn@sap.com>
Mon, 6 Jan 2020 10:40:05 +0000 (11:40 +0100)
Change-Id: Ia4b96ae1c2cc9357802487384ee32a80ed40334b
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/SmartOutputStream.java

index ad5e8d479e09ec7bd743a6e6246c5daf74f65b33..0dfaec2567f5f583e481a832a896927fd53c2517 100644 (file)
@@ -105,17 +105,16 @@ class SmartOutputStream extends TemporaryBuffer {
                        // If output hasn't started yet, the entire thing fit into our
                        // buffer. Try to use a proper Content-Length header, and also
                        // deflate the response with gzip if it will be smaller.
-                       TemporaryBuffer out = this;
-
-                       if (256 < out.length() && acceptsGzipEncoding(req)) {
+                       if (256 < this.length() && acceptsGzipEncoding(req)) {
                                TemporaryBuffer gzbuf = new TemporaryBuffer.Heap(LIMIT);
                                try {
                                        try (GZIPOutputStream gzip = new GZIPOutputStream(gzbuf)) {
-                                               out.writeTo(gzip, null);
+                                               this.writeTo(gzip, null);
                                        }
-                                       if (gzbuf.length() < out.length()) {
-                                               out = gzbuf;
+                                       if (gzbuf.length() < this.length()) {
                                                rsp.setHeader(HDR_CONTENT_ENCODING, ENCODING_GZIP);
+                                               writeResponse(gzbuf);
+                                               return;
                                        }
                                } catch (IOException err) {
                                        // Most likely caused by overflowing the buffer, meaning
@@ -123,15 +122,18 @@ class SmartOutputStream extends TemporaryBuffer {
                                        // copy and use the original.
                                }
                        }
+                       writeResponse(this);
+               }
+       }
 
-                       // The Content-Length cannot overflow when cast to an int, our
-                       // hardcoded LIMIT constant above assures us we wouldn't store
-                       // more than 2 GiB of content in memory.
-                       rsp.setContentLength((int) out.length());
-                       try (OutputStream os = rsp.getOutputStream()) {
-                               out.writeTo(os, null);
-                               os.flush();
-                       }
+       private void writeResponse(TemporaryBuffer out) throws IOException {
+               // The Content-Length cannot overflow when cast to an int, our
+               // hardcoded LIMIT constant above assures us we wouldn't store
+               // more than 2 GiB of content in memory.
+               rsp.setContentLength((int) out.length());
+               try (OutputStream os = rsp.getOutputStream()) {
+                       out.writeTo(os, null);
+                       os.flush();
                }
        }
 }