Details
-
Bug
-
Status: Closed
-
Blocker
-
Resolution: Fixed
-
4.2.2, 4.2.3
-
None
Description
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
@Override
public void close() throws IOException
}, 123);
GzipDecompressingEntity gunzipe = new GzipDecompressingEntity(in);
try
catch (IOException e)
{ // As I cannot get the content, GzipDecompressingEntity is supposed // to have released everything Assert.assertTrue(inputStreamIsClosed.get()); }}