Oleg, > StandardMethods.TRACE.name <http://standardmethods.trace.name/>() + "requests may not include an entity."
I think you are missing a space before "request": StandardMethods.TRACE.name <http://standardmethods.trace.name/>() + " requests may not include an entity." Gary On Wed, Apr 10, 2019 at 1:20 PM <[email protected]> wrote: > This is an automated email from the ASF dual-hosted git repository. > > olegk pushed a commit to branch HTTPCLIENT-1981 > in repository > https://gitbox.apache.org/repos/asf/httpcomponents-client.git > > commit 63a6bd760ec1ec1f8daa6faf5a669aee3da3a06e > Author: Jay Modi <jay at elastic dot com> > AuthorDate: Wed Apr 10 19:13:12 2019 +0200 > > HTTPCLIENT-1981: disallow TRACE requests with an enclosed entity > --- > .../http/async/methods/AsyncRequestBuilder.java | 5 +++ > .../hc/client5/http/classic/methods/HttpTrace.java | 7 ++++ > .../http/classic/methods/RequestBuilder.java | 5 +++ > .../async/methods/TestAsyncRequestBuilder.java} | 39 > +++++----------------- > .../http/classic/methods/TestHttpTrace.java} | 35 > ++++--------------- > .../http/classic/methods/TestRequestBuilder.java | 7 ++++ > 6 files changed, 39 insertions(+), 59 deletions(-) > > diff --git > a/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/AsyncRequestBuilder.java > b/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/AsyncRequestBuilder.java > index 97c567b..59d332e 100644 > --- > a/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/AsyncRequestBuilder.java > +++ > b/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/AsyncRequestBuilder.java > @@ -430,6 +430,11 @@ public class AsyncRequestBuilder { > } > } > } > + > + if (entityProducerCopy != null && > StandardMethods.TRACE.name().equalsIgnoreCase(method)) > { > + throw new IllegalStateException(StandardMethods.TRACE.name() > + "requests may not include an entity."); > + } > + > final ConfigurableHttpRequest request = host != null ? > new ConfigurableHttpRequest(method, host, > !TextUtils.isBlank(path) ? path : "/") : > new ConfigurableHttpRequest(method, uri != null ? uri : > URI.create("/")); > diff --git > a/httpclient5/src/main/java/org/apache/hc/client5/http/classic/methods/HttpTrace.java > b/httpclient5/src/main/java/org/apache/hc/client5/http/classic/methods/HttpTrace.java > index 17092a1..a937ba2 100644 > --- > a/httpclient5/src/main/java/org/apache/hc/client5/http/classic/methods/HttpTrace.java > +++ > b/httpclient5/src/main/java/org/apache/hc/client5/http/classic/methods/HttpTrace.java > @@ -29,6 +29,8 @@ package org.apache.hc.client5.http.classic.methods; > > import java.net.URI; > > +import org.apache.hc.core5.http.HttpEntity; > + > /** > * HTTP TRACE method. > * > @@ -60,4 +62,9 @@ public class HttpTrace extends HttpUriRequestBase { > this(URI.create(uri)); > } > > + @Override > + public void setEntity(final HttpEntity entity) { > + throw new IllegalStateException(METHOD_NAME + " requests may not > include an entity."); > + } > + > } > diff --git > a/httpclient5/src/main/java/org/apache/hc/client5/http/classic/methods/RequestBuilder.java > b/httpclient5/src/main/java/org/apache/hc/client5/http/classic/methods/RequestBuilder.java > index 4a3572a..6a70bc6 100644 > --- > a/httpclient5/src/main/java/org/apache/hc/client5/http/classic/methods/RequestBuilder.java > +++ > b/httpclient5/src/main/java/org/apache/hc/client5/http/classic/methods/RequestBuilder.java > @@ -482,6 +482,11 @@ public class RequestBuilder { > } > } > } > + > + if (entityCopy != null && > StandardMethods.TRACE.name().equalsIgnoreCase(method)) > { > + throw new IllegalStateException(StandardMethods.TRACE.name() > + "requests may not include an entity."); > + } > + > final HttpUriRequestBase result = new HttpUriRequestBase(method, > uriNotNull); > result.setVersion(this.version != null ? this.version : > HttpVersion.HTTP_1_1); > if (this.headerGroup != null) { > diff --git > a/httpclient5/src/main/java/org/apache/hc/client5/http/classic/methods/HttpTrace.java > b/httpclient5/src/test/java/org/apache/hc/client5/http/async/methods/TestAsyncRequestBuilder.java > similarity index 59% > copy from > httpclient5/src/main/java/org/apache/hc/client5/http/classic/methods/HttpTrace.java > copy to > httpclient5/src/test/java/org/apache/hc/client5/http/async/methods/TestAsyncRequestBuilder.java > index 17092a1..cb1e5e9 100644 > --- > a/httpclient5/src/main/java/org/apache/hc/client5/http/classic/methods/HttpTrace.java > +++ > b/httpclient5/src/test/java/org/apache/hc/client5/http/async/methods/TestAsyncRequestBuilder.java > @@ -25,39 +25,18 @@ > * > */ > > -package org.apache.hc.client5.http.classic.methods; > +package org.apache.hc.client5.http.async.methods; > > -import java.net.URI; > +import org.apache.hc.core5.http.nio.entity.BasicAsyncEntityProducer; > +import org.junit.Test; > > -/** > - * HTTP TRACE method. > - * > - * @since 4.0 > - */ > -public class HttpTrace extends HttpUriRequestBase { > - > - private static final long serialVersionUID = 1L; > - > - public final static String METHOD_NAME = "TRACE"; > - > - /** > - * Creates a new instance initialized with the given URI. > - * > - * @param uri a non-null request URI. > - * @throws IllegalArgumentException if the uri is null. > - */ > - public HttpTrace(final URI uri) { > - super(METHOD_NAME, uri); > - } > +public class TestAsyncRequestBuilder { > > - /** > - * Creates a new instance initialized with the given URI. > - * > - * @param uri a non-null request URI. > - * @throws IllegalArgumentException if the uri is invalid. > - */ > - public HttpTrace(final String uri) { > - this(URI.create(uri)); > + @Test(expected = IllegalStateException.class) > + public void testBuildTraceWithEntity() { > + final AsyncRequestBuilder builder = > AsyncRequestBuilder.create("TRACE").setUri("/path"); > + builder.setEntity(new BasicAsyncEntityProducer("stuff")); > + builder.build(); > } > > } > diff --git > a/httpclient5/src/main/java/org/apache/hc/client5/http/classic/methods/HttpTrace.java > b/httpclient5/src/test/java/org/apache/hc/client5/http/classic/methods/TestHttpTrace.java > similarity index 62% > copy from > httpclient5/src/main/java/org/apache/hc/client5/http/classic/methods/HttpTrace.java > copy to > httpclient5/src/test/java/org/apache/hc/client5/http/classic/methods/TestHttpTrace.java > index 17092a1..27089d2 100644 > --- > a/httpclient5/src/main/java/org/apache/hc/client5/http/classic/methods/HttpTrace.java > +++ > b/httpclient5/src/test/java/org/apache/hc/client5/http/classic/methods/TestHttpTrace.java > @@ -27,37 +27,14 @@ > > package org.apache.hc.client5.http.classic.methods; > > -import java.net.URI; > +import org.junit.Test; > > -/** > - * HTTP TRACE method. > - * > - * @since 4.0 > - */ > -public class HttpTrace extends HttpUriRequestBase { > - > - private static final long serialVersionUID = 1L; > - > - public final static String METHOD_NAME = "TRACE"; > - > - /** > - * Creates a new instance initialized with the given URI. > - * > - * @param uri a non-null request URI. > - * @throws IllegalArgumentException if the uri is null. > - */ > - public HttpTrace(final URI uri) { > - super(METHOD_NAME, uri); > - } > +public class TestHttpTrace { > > - /** > - * Creates a new instance initialized with the given URI. > - * > - * @param uri a non-null request URI. > - * @throws IllegalArgumentException if the uri is invalid. > - */ > - public HttpTrace(final String uri) { > - this(URI.create(uri)); > + @Test(expected = IllegalStateException.class) > + public void testHttpTraceSetEntity() { > + final HttpTrace httpTrace = new HttpTrace("/path"); > + httpTrace.setEntity(null); > } > > } > diff --git > a/httpclient5/src/test/java/org/apache/hc/client5/http/classic/methods/TestRequestBuilder.java > b/httpclient5/src/test/java/org/apache/hc/client5/http/classic/methods/TestRequestBuilder.java > index f121933..b6789c2 100644 > --- > a/httpclient5/src/test/java/org/apache/hc/client5/http/classic/methods/TestRequestBuilder.java > +++ > b/httpclient5/src/test/java/org/apache/hc/client5/http/classic/methods/TestRequestBuilder.java > @@ -264,6 +264,13 @@ public class TestRequestBuilder { > assertBuild(StandardCharsets.ISO_8859_1); > } > > + @Test(expected = IllegalStateException.class) > + public void testBuildTraceWithEntity() { > + final RequestBuilder requestBuilder = > RequestBuilder.create("TRACE").setUri("/path"); > + requestBuilder.setEntity(new StringEntity("foo")); > + requestBuilder.build(); > + } > + > private void assertBuild(final Charset charset) throws Exception { > final RequestBuilder requestBuilder = > RequestBuilder.create("GET").setCharset(charset); > requestBuilder.setUri("https://somehost.com/stuff"); > >
