From f8df337893f7ba7c0eb1819f4cbdcc8ad145e9f8 Mon Sep 17 00:00:00 2001 From: Jean-Eric Cuendet Date: Wed, 9 Mar 2016 12:21:21 +0100 Subject: [PATCH] Verify that the stream is more than ZERO bytes before un-gzipping Fixes gh-891 --- .../zuul/filters/post/SendResponseFilter.java | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/post/SendResponseFilter.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/post/SendResponseFilter.java index ebbeb023..874efb57 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/post/SendResponseFilter.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/post/SendResponseFilter.java @@ -125,17 +125,25 @@ public class SendResponseFilter extends ZuulFilter { // before sending to client // else, stream gzip directly to client if (context.getResponseGZipped() && !isGzipRequested) { - try { - inputStream = new GZIPInputStream(is); + // If origin tell it's GZipped but the content is ZERO bytes, + // don't try to uncompress + final Long len = context.getOriginContentLength(); + if (len == null || len > 0) { + try { + inputStream = new GZIPInputStream(is); + } + catch (java.util.zip.ZipException ex) { + log.debug( + "gzip expected but not " + + "received assuming unencoded response " + + RequestContext.getCurrentContext() + .getRequest().getRequestURL() + .toString()); + inputStream = is; + } } - catch (java.util.zip.ZipException ex) { - log.debug( - "gzip expected but not " - + "received assuming unencoded response " - + RequestContext.getCurrentContext() - .getRequest().getRequestURL() - .toString()); - inputStream = is; + else { + // Already done : inputStream = is; } } else if (context.getResponseGZipped() && isGzipRequested) {