Francois-Xavier Bonnet created HTTPCLIENT-1281:
--------------------------------------------------

             Summary: GzipDecompressingEntity does not release InputStream when 
an IOException occurs while reading the Gzip header
                 Key: HTTPCLIENT-1281
                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1281
             Project: HttpComponents HttpClient
          Issue Type: Bug
          Components: HttpClient
    Affects Versions: 4.2.2, 4.2.3, Snapshot
            Reporter: Francois-Xavier Bonnet
            Priority: Blocker


When calling method 
org.apache.http.client.entity.DecompressingEntity.getContent() for a 
GzipDecompressingEntity, the method tries to build a GZIPInputStream, then the 
GzipInputStream tries to read the Gzip header and fails throwing an IOException.
At the end you get an Exception but the backend InputStream is never closed 
resulting in a connection leak.

Here is a test to reproduce:
        @Test
        public void 
testGzipDecompressingEntityDoesNotCrashInConstructorAndLeaveInputStreamOpen()
                        throws Exception {
                final AtomicBoolean inputStreamIsClosed = new 
AtomicBoolean(false);
                HttpEntity in = new InputStreamEntity(new InputStream() {
                        @Override
                        public int read() throws IOException {
                                throw new IOException("An exception occurred");
                        }

                        @Override
                        public void close() throws IOException {
                                inputStreamIsClosed.set(true);
                        }

                }, 123);
                GzipDecompressingEntity gunzipe = new 
GzipDecompressingEntity(in);
                try {
                        InputStream is = gunzipe.getContent();
                } catch (IOException e) {
                        // As I cannot get the content, GzipDecompressingEntity 
is supposed
                        // to have released everything
                        Assert.assertTrue(inputStreamIsClosed.get());
                }
        }


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to