Merge remote-tracking branch 'origin/jetty-10.0.x' into jetty-11.0.x

This commit is contained in:
Joakim Erdfelt 2022-03-22 10:56:40 -05:00
commit f3dce81793
No known key found for this signature in database
GPG Key ID: 2D0E1FB8FE4B68B4
2 changed files with 13 additions and 5 deletions

View File

@ -1435,8 +1435,10 @@ public class Request implements HttpServletRequest
RequestLog requestLog = httpChannel.getRequestLog(); RequestLog requestLog = httpChannel.getRequestLog();
if (requestLog != null) if (requestLog != null)
{ {
// Don't allow pulling more parameters // Don't allow pulling more parameters from request body content
_contentParamsExtracted = true; _contentParamsExtracted = true;
if (_contentParameters == null)
_contentParameters = NO_PARAMS;
// Reset the status code to what was committed // Reset the status code to what was committed
MetaData.Response committedResponse = getResponse().getCommittedMetaData(); MetaData.Response committedResponse = getResponse().getCommittedMetaData();

View File

@ -34,6 +34,8 @@ import org.eclipse.jetty.util.IO;
import org.eclipse.jetty.util.component.LifeCycle; import org.eclipse.jetty.util.component.LifeCycle;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -145,8 +147,9 @@ public class RequestLogTest
* Test an unread HTTP/1.1 POST, it has valid body content, the dispatched Handler on the server doesn't read the POST body content. * Test an unread HTTP/1.1 POST, it has valid body content, the dispatched Handler on the server doesn't read the POST body content.
* The RequestLog accidentally attempts to read the Request body content due to the use of Request.getParameterNames() API. * The RequestLog accidentally attempts to read the Request body content due to the use of Request.getParameterNames() API.
*/ */
@Test @ParameterizedTest
public void testNormalPostFormRequest() throws Exception @ValueSource(strings = {"/hello", "/hello?a=b"})
public void testNormalPostFormRequest(String requestPath) throws Exception
{ {
Server server = null; Server server = null;
try try
@ -179,7 +182,7 @@ public class RequestLogTest
byte[] bufForm = form.toString().getBytes(UTF_8); byte[] bufForm = form.toString().getBytes(UTF_8);
StringBuilder req = new StringBuilder(); StringBuilder req = new StringBuilder();
req.append("POST /hello HTTP/1.1\r\n"); req.append("POST ").append(requestPath).append(" HTTP/1.1\r\n");
req.append("Host: ").append(baseURI.getRawAuthority()).append("\r\n"); req.append("Host: ").append(baseURI.getRawAuthority()).append("\r\n");
req.append("Content-Type: ").append(MimeTypes.Type.FORM_ENCODED).append("\r\n"); req.append("Content-Type: ").append(MimeTypes.Type.FORM_ENCODED).append("\r\n");
req.append("Content-Length: ").append(bufForm.length).append("\r\n"); req.append("Content-Length: ").append(bufForm.length).append("\r\n");
@ -213,7 +216,10 @@ public class RequestLogTest
assertThat("Body Content", bodyContent, containsString("Got POST to /hello")); assertThat("Body Content", bodyContent, containsString("Got POST to /hello"));
String reqlog = requestLogLines.poll(5, TimeUnit.SECONDS); String reqlog = requestLogLines.poll(5, TimeUnit.SECONDS);
assertThat("RequestLog", reqlog, containsString("method:POST|uri:/hello|paramNames.size:0|status:200")); int querySize = 0;
if (requestPath.contains("?"))
querySize = 1; // assuming that parameterized version only has 1 query value
assertThat("RequestLog", reqlog, containsString("method:POST|uri:/hello|paramNames.size:" + querySize + "|status:200"));
} }
} }
finally finally