Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: HttpResponse GZip content encoding equality change #843

Merged
Expand Up @@ -80,6 +80,12 @@ public final class HttpResponse {
/** Whether {@link #getContent()} should return raw input stream. */
private final boolean returnRawInputStream;

/** Content encoding for GZip */
private static final String CONTENT_ENCODING_GZIP = "gzip";

/** Content encoding for GZip (legacy) */
private static final String CONTENT_ENCODING_XGZIP = "x-gzip";
egsavage marked this conversation as resolved.
Show resolved Hide resolved

/**
* Determines the limit to the content size that will be logged during {@link #getContent()}.
*
Expand Down Expand Up @@ -327,12 +333,12 @@ public InputStream getContent() throws IOException {
boolean contentProcessed = false;
try {
// gzip encoding (wrap content with GZipInputStream)
String contentEncoding = this.contentEncoding;
if (!returnRawInputStream
&& contentEncoding != null
&& contentEncoding.contains("gzip")) {
&& this.contentEncoding != null
&& (CONTENT_ENCODING_GZIP.equalsIgnoreCase(this.contentEncoding.trim())
egsavage marked this conversation as resolved.
Show resolved Hide resolved
|| CONTENT_ENCODING_XGZIP.equalsIgnoreCase(this.contentEncoding.trim()))) {
lowLevelResponseContent =
new ConsumingInputStream(new GZIPInputStream(lowLevelResponseContent));
new ConsumingInputStream(new GZIPInputStream(lowLevelResponseContent));
}
// logging (wrap content with LoggingInputStream)
Logger logger = HttpTransport.LOGGER;
Expand Down
Expand Up @@ -495,4 +495,30 @@ public LowLevelHttpResponse execute() throws IOException {
assertEquals("abcd", response.parseAsString());
assertTrue(output.isClosed());
}

public void testGetContent_otherEncodingWithgzipInItsName_GzipIsNotUsed() throws IOException {
final MockLowLevelHttpResponse mockResponse = new MockLowLevelHttpResponse();
mockResponse.setContent("abcd");
mockResponse.setContentEncoding("otherEncodingWithgzipInItsName");
mockResponse.setContentType("text/plain");

HttpTransport transport =
new MockHttpTransport() {
egsavage marked this conversation as resolved.
Show resolved Hide resolved
@Override
public LowLevelHttpRequest buildRequest(String method, final String url)
throws IOException {
return new MockLowLevelHttpRequest() {
@Override
public LowLevelHttpResponse execute() throws IOException {
return mockResponse;
}
};
}
};
HttpRequest request =
transport.createRequestFactory().buildHeadRequest(HttpTesting.SIMPLE_GENERIC_URL);
// If gzip was used on this response, an exception would be thrown
HttpResponse response = request.execute();
assertEquals("abcd", response.parseAsString());
}
}