On Tue, 14 Jun 2022 15:20:28 GMT, Conor Cleary <ccle...@openjdk.org> wrote:

> **Issue**
> A failure in this test was observed whereby an unexpected connection from a 
> client that was not created by the test caused the test to unsucessfully 
> complete. 
> 
> **Solution**
> When a connection is accepted by the ServerSocket, some verification of the 
> Request URI and of the Request Path is conducted. If the client connection is 
> found to be invalid or external to the test, the connection is closed. The 
> ServerSocket will continue to accept new connections until the correct 
> parameters are met. Once a valid connection is accepted, the test behaves 
> exactly as it previously did.

Thanks for the fix Conor! I have suggested some changes that should make the 
fix easier to review and keep it closer to the original.

test/jdk/java/net/httpclient/ServerCloseTest.java line 302:

> 300: 
> 301:                     StringTokenizer tokenizer = new 
> StringTokenizer(requestLine);
> 302:                     tokenizer.nextToken(); // Skip method token as not 
> used

Since we were asserting here before, maybe we could directly close the 
clientConnection here if `method` is not GET or POST.

Something like:


if (!"GET".equals(method) && !POST.equals(method)) {
   System.out.println(now() + getName() + ": Unexpected method: " + method);
   clientConnection.close();
   continue;
}

test/jdk/java/net/httpclient/ServerCloseTest.java line 304:

> 302:                     tokenizer.nextToken(); // Skip method token as not 
> used
> 303:                     String path = tokenizer.nextToken();
> 304: 

We should check `path` immediately before trying to build the URI. If it 
doesn't contain what we expect, then close the clientConnection and continue as 
suggested above.

test/jdk/java/net/httpclient/ServerCloseTest.java line 313:

> 311:                         System.err.printf("Bad target address: \"%s\" in 
> \"%s\"%n",
> 312:                                 path, requestLine);
> 313:                         validURI = false;

maybe just leave that as before?

test/jdk/java/net/httpclient/ServerCloseTest.java line 317:

> 315: 
> 316:                     // Proceed if URI is well-formed and the request 
> path is as expected
> 317:                     if (validURI && path.contains("/dummy/x")) {

Since we will have already checked `path`, `method` and `uri`  here just 
unconditionally add the clientConnection to the list and proceed as before.

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

Changes requested by dfuchs (Reviewer).

PR: https://git.openjdk.org/jdk/pull/9155

Reply via email to