RFR: 8274779: HttpURLConnection: HttpClient and HttpsClient incorrectly check request method when set to POST [v3]

Daniel Fuchs dfuchs at openjdk.java.net
Fri Oct 15 15:28:50 UTC 2021


On Fri, 15 Oct 2021 14:47:18 GMT, Evan Whelan <ewhelan at openjdk.org> wrote:

>> Hi,
>> 
>> Please review my fix for JDK-8274779 which changes how HttpClient and HttpsClient  checks for equality when comparing request methods. 
>> 
>> When `HttpURLConnection.setRequestMethod` is passed `new String("POST")` rather than the "POST" String literal, the old behaviour resulted in broken HttpClients being reused from the `KeepAliveCache`. 
>> 
>> This is because a call to `HttpClient.available()` was never reachable due to identity equality being used instead of logical equality.
>> 
>> The test case uses an injected KeepAliveCache, to which we put a HttpClient that is unavailable. By comparing the initial HttpClient's `connectTimeout` value to the "cached" client's connectTimeout (1234 vs 4321 respectively) we can assert that these values should never be equal as a new HttpClient should be created in cases where we can no longer use the cached one.
>> 
>> All CI testing is green for this fix.
>> 
>> Kind regards,
>> Evan
>
> Evan Whelan has updated the pull request incrementally with two additional commits since the last revision:
> 
>  - Extracted both connectTimeouts to variables and added copyright header to accessor
>  - Removed reflection in favour of injected accessor for KeepAliveCache

test/jdk/sun/net/www/http/RequestMethodCheck/RequestMethodEquality.java line 96:

> 94:             Field inCache = HttpClient.class.getDeclaredField("inCache");
> 95:             inCache.setAccessible(true);
> 96:             inCache.setBoolean(freshClient, true); // allows the assertion in HttpClient.New to pass

You can use the HttpClientAccess to get and set this field too, since the field is protected in HttpClient.
Just add a method:

public void setInCache(HttpClient client, boolean inCache) { client.inCache = inCache; } 

to HttpClientAccess.

-------------

PR: https://git.openjdk.java.net/jdk/pull/5964


More information about the net-dev mailing list