Control: tags -1 + moreinfo confirmed
On 2021-04-12 00:26:08 +0200, Emmanuel Bourg wrote:
> Package: release.debian.org
> Severity: normal
> User: release.debian.org@packages.debian.org
> Usertags: unblock
>
> Hi,
>
> This is a pre-upload request to unblock jetty9/9.4.39-1, this update fixes
> 3 vulnerabilities (CVE-2021-28163, CVE-2021-28164 and CVE-2021-28165).
ACK. Please remove the moreinfo tag once the version is available in
unstable.
Cheers
>
> The debdiff is attached below.
>
> Thank you,
>
> Emmanuel Bourg
>
>
> unblock jetty9/9.4.38-1
> diff -Nru jetty9-9.4.38/aggregates/jetty-all/pom.xml jetty9-9.4.39/aggregates/jetty-all/pom.xml
> --- jetty9-9.4.38/aggregates/jetty-all/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/aggregates/jetty-all/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> <relativePath>../../pom.xml</relativePath>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/aggregates/jetty-all-compact3/pom.xml jetty9-9.4.39/aggregates/jetty-all-compact3/pom.xml
> --- jetty9-9.4.38/aggregates/jetty-all-compact3/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/aggregates/jetty-all-compact3/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> <relativePath>../../pom.xml</relativePath>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/apache-jsp/pom.xml jetty9-9.4.39/apache-jsp/pom.xml
> --- jetty9-9.4.38/apache-jsp/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/apache-jsp/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>apache-jsp</artifactId>
> diff -Nru jetty9-9.4.38/apache-jstl/pom.xml jetty9-9.4.39/apache-jstl/pom.xml
> --- jetty9-9.4.38/apache-jstl/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/apache-jstl/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>apache-jstl</artifactId>
> diff -Nru jetty9-9.4.38/build-resources/pom.xml jetty9-9.4.39/build-resources/pom.xml
> --- jetty9-9.4.38/build-resources/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/build-resources/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <modelVersion>4.0.0</modelVersion>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>build-resources</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> <packaging>jar</packaging>
> <name>Jetty :: Build Resources</name>
>
> diff -Nru jetty9-9.4.38/debian/changelog jetty9-9.4.39/debian/changelog
> --- jetty9-9.4.38/debian/changelog 2021-02-28 21:50:15.000000000 +0100
> +++ jetty9-9.4.39/debian/changelog 2021-04-12 00:11:03.000000000 +0200
> @@ -1,3 +1,19 @@
> +jetty9 (9.4.39-1) unstable; urgency=high
> +
> + * New upstream release
> + - Fixed CVE-2021-28163: If a user uses a webapps directory that is a
> + symlink, the contents of the webapps directory is deployed as a static
> + webapp, inadvertently serving the webapps themselves and anything else
> + that might be in that directory.
> + - Fixes CVE-2021-28164: The default compliance mode allows requests with
> + URIs that contain %2e or %2e%2e segments to access protected resources
> + within the WEB-INF directory. This can reveal sensitive information
> + regarding the implementation of a web application.
> + - Fixes CVE-2021-28165: CPU usage can reach 100% upon receiving a large
> + invalid TLS frame.
> +
> + -- Emmanuel Bourg <ebourg@apache.org> Mon, 12 Apr 2021 00:11:03 +0200
> +
> jetty9 (9.4.38-1) unstable; urgency=medium
>
> * New upstream release
> diff -Nru jetty9-9.4.38/examples/async-rest/async-rest-jar/pom.xml jetty9-9.4.39/examples/async-rest/async-rest-jar/pom.xml
> --- jetty9-9.4.38/examples/async-rest/async-rest-jar/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/examples/async-rest/async-rest-jar/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>example-async-rest</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/examples/async-rest/async-rest-webapp/pom.xml jetty9-9.4.39/examples/async-rest/async-rest-webapp/pom.xml
> --- jetty9-9.4.38/examples/async-rest/async-rest-webapp/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/examples/async-rest/async-rest-webapp/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>example-async-rest</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/examples/async-rest/pom.xml jetty9-9.4.39/examples/async-rest/pom.xml
> --- jetty9-9.4.38/examples/async-rest/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/examples/async-rest/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty.examples</groupId>
> <artifactId>examples-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/examples/embedded/pom.xml jetty9-9.4.39/examples/embedded/pom.xml
> --- jetty9-9.4.38/examples/embedded/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/examples/embedded/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty.examples</groupId>
> <artifactId>examples-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> <relativePath>../pom.xml</relativePath>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/examples/pom.xml jetty9-9.4.39/examples/pom.xml
> --- jetty9-9.4.38/examples/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/examples/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-alpn/jetty-alpn-client/pom.xml jetty9-9.4.39/jetty-alpn/jetty-alpn-client/pom.xml
> --- jetty9-9.4.38/jetty-alpn/jetty-alpn-client/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-alpn/jetty-alpn-client/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-alpn-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-alpn-client</artifactId>
> diff -Nru jetty9-9.4.38/jetty-alpn/jetty-alpn-conscrypt-client/pom.xml jetty9-9.4.39/jetty-alpn/jetty-alpn-conscrypt-client/pom.xml
> --- jetty9-9.4.38/jetty-alpn/jetty-alpn-conscrypt-client/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-alpn/jetty-alpn-conscrypt-client/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -4,7 +4,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-alpn-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-alpn/jetty-alpn-conscrypt-client/src/test/java/org/eclipse/jetty/alpn/java/client/ConscryptHTTP2ClientTest.java jetty9-9.4.39/jetty-alpn/jetty-alpn-conscrypt-client/src/test/java/org/eclipse/jetty/alpn/java/client/ConscryptHTTP2ClientTest.java
> --- jetty9-9.4.38/jetty-alpn/jetty-alpn-conscrypt-client/src/test/java/org/eclipse/jetty/alpn/java/client/ConscryptHTTP2ClientTest.java 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-alpn/jetty-alpn-conscrypt-client/src/test/java/org/eclipse/jetty/alpn/java/client/ConscryptHTTP2ClientTest.java 2021-03-25 15:36:22.000000000 +0100
> @@ -43,9 +43,12 @@
> import org.junit.jupiter.api.Assumptions;
> import org.junit.jupiter.api.Tag;
> import org.junit.jupiter.api.Test;
> +import org.junit.jupiter.api.condition.EnabledOnOs;
>
> import static org.junit.jupiter.api.Assertions.assertTrue;
> +import static org.junit.jupiter.api.condition.OS.LINUX;
>
> +@EnabledOnOs({LINUX}) // TODO review if should be enabled on other OS
> public class ConscryptHTTP2ClientTest
> {
> @Tag("external")
> diff -Nru jetty9-9.4.38/jetty-alpn/jetty-alpn-conscrypt-server/pom.xml jetty9-9.4.39/jetty-alpn/jetty-alpn-conscrypt-server/pom.xml
> --- jetty9-9.4.38/jetty-alpn/jetty-alpn-conscrypt-server/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-alpn/jetty-alpn-conscrypt-server/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-alpn-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-alpn/jetty-alpn-java-client/pom.xml jetty9-9.4.39/jetty-alpn/jetty-alpn-java-client/pom.xml
> --- jetty9-9.4.38/jetty-alpn/jetty-alpn-java-client/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-alpn/jetty-alpn-java-client/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -4,7 +4,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-alpn-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-alpn/jetty-alpn-java-server/pom.xml jetty9-9.4.39/jetty-alpn/jetty-alpn-java-server/pom.xml
> --- jetty9-9.4.38/jetty-alpn/jetty-alpn-java-server/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-alpn/jetty-alpn-java-server/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-alpn-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-alpn/jetty-alpn-openjdk8-client/pom.xml jetty9-9.4.39/jetty-alpn/jetty-alpn-openjdk8-client/pom.xml
> --- jetty9-9.4.38/jetty-alpn/jetty-alpn-openjdk8-client/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-alpn/jetty-alpn-openjdk8-client/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -4,7 +4,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-alpn-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-alpn/jetty-alpn-openjdk8-server/pom.xml jetty9-9.4.39/jetty-alpn/jetty-alpn-openjdk8-server/pom.xml
> --- jetty9-9.4.38/jetty-alpn/jetty-alpn-openjdk8-server/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-alpn/jetty-alpn-openjdk8-server/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-alpn-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-alpn/jetty-alpn-server/pom.xml jetty9-9.4.39/jetty-alpn/jetty-alpn-server/pom.xml
> --- jetty9-9.4.38/jetty-alpn/jetty-alpn-server/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-alpn/jetty-alpn-server/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-alpn-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-alpn-server</artifactId>
> diff -Nru jetty9-9.4.38/jetty-alpn/pom.xml jetty9-9.4.39/jetty-alpn/pom.xml
> --- jetty9-9.4.38/jetty-alpn/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-alpn/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-alpn-parent</artifactId>
> diff -Nru jetty9-9.4.38/jetty-annotations/pom.xml jetty9-9.4.39/jetty-annotations/pom.xml
> --- jetty9-9.4.38/jetty-annotations/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-annotations/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-annotations</artifactId>
> diff -Nru jetty9-9.4.38/jetty-ant/pom.xml jetty9-9.4.39/jetty-ant/pom.xml
> --- jetty9-9.4.38/jetty-ant/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-ant/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-ant</artifactId>
> diff -Nru jetty9-9.4.38/jetty-bom/pom.xml jetty9-9.4.39/jetty-bom/pom.xml
> --- jetty9-9.4.38/jetty-bom/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-bom/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -9,7 +9,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <build>
> @@ -53,336 +53,336 @@
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>apache-jsp</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>apache-jstl</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-alpn-client</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-alpn-java-client</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-alpn-java-server</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-alpn-openjdk8-client</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-alpn-openjdk8-server</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-alpn-conscrypt-client</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-alpn-conscrypt-server</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-alpn-server</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-annotations</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-ant</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-client</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-continuation</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-deploy</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-distribution</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> <type>zip</type>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-distribution</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> <type>tar.gz</type>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty.fcgi</groupId>
> <artifactId>fcgi-client</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty.fcgi</groupId>
> <artifactId>fcgi-server</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty.gcloud</groupId>
> <artifactId>jetty-gcloud-session-manager</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-home</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> <type>zip</type>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-home</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> <type>tar.gz</type>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-http</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty.http2</groupId>
> <artifactId>http2-client</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty.http2</groupId>
> <artifactId>http2-common</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty.http2</groupId>
> <artifactId>http2-hpack</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty.http2</groupId>
> <artifactId>http2-http-client-transport</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty.http2</groupId>
> <artifactId>http2-server</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-http-spi</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>infinispan-common</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>infinispan-remote-query</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>infinispan-embedded-query</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-hazelcast</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-io</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-jaas</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-jaspi</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-jmx</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-jndi</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty.memcached</groupId>
> <artifactId>jetty-memcached-sessions</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-nosql</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty.osgi</groupId>
> <artifactId>jetty-osgi-boot</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty.osgi</groupId>
> <artifactId>jetty-osgi-boot-jsp</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty.osgi</groupId>
> <artifactId>jetty-osgi-boot-warurl</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty.osgi</groupId>
> <artifactId>jetty-httpservice</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-plus</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-proxy</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-quickstart</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-rewrite</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-security</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-openid</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-server</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-servlet</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-servlets</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-spring</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-unixsocket</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-util</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-util-ajax</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-webapp</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty.websocket</groupId>
> <artifactId>javax-websocket-client-impl</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty.websocket</groupId>
> <artifactId>javax-websocket-server-impl</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty.websocket</groupId>
> <artifactId>websocket-api</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty.websocket</groupId>
> <artifactId>websocket-client</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty.websocket</groupId>
> <artifactId>websocket-common</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty.websocket</groupId>
> <artifactId>websocket-server</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty.websocket</groupId>
> <artifactId>websocket-servlet</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> <dependency>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-xml</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </dependency>
> </dependencies>
> </dependencyManagement>
> diff -Nru jetty9-9.4.38/jetty-cdi/pom.xml jetty9-9.4.39/jetty-cdi/pom.xml
> --- jetty9-9.4.38/jetty-cdi/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-cdi/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <groupId>org.eclipse.jetty</groupId>
> diff -Nru jetty9-9.4.38/jetty-cdi/src/test/java/org/eclipse/jetty/embedded/EmbeddedWeldTest.java jetty9-9.4.39/jetty-cdi/src/test/java/org/eclipse/jetty/embedded/EmbeddedWeldTest.java
> --- jetty9-9.4.38/jetty-cdi/src/test/java/org/eclipse/jetty/embedded/EmbeddedWeldTest.java 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-cdi/src/test/java/org/eclipse/jetty/embedded/EmbeddedWeldTest.java 2021-03-25 15:36:22.000000000 +0100
> @@ -167,7 +167,7 @@
> @Test
> public void testWebappContext() throws Exception
> {
> - Server server = new Server(8080);
> + Server server = new Server(0);
> server.addConnector(new LocalConnector(server));
> WebAppContext webapp = new WebAppContext();
> webapp.setContextPath("/");
> @@ -199,7 +199,7 @@
> @Test
> public void testWebappContextDiscovered() throws Exception
> {
> - Server server = new Server(8080);
> + Server server = new Server(0);
> server.addConnector(new LocalConnector(server));
> WebAppContext webapp = new WebAppContext();
> webapp.setContextPath("/");
> diff -Nru jetty9-9.4.38/jetty-client/pom.xml jetty9-9.4.39/jetty-client/pom.xml
> --- jetty9-9.4.38/jetty-client/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-client/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> @@ -51,6 +51,7 @@
> <goal>shade</goal>
> </goals>
> <configuration>
> + <minimizeJar>true</minimizeJar>
> <shadedArtifactAttached>true</shadedArtifactAttached>
> <shadedClassifierName>hybrid</shadedClassifierName>
> <artifactSet>
> diff -Nru jetty9-9.4.38/jetty-continuation/pom.xml jetty9-9.4.39/jetty-continuation/pom.xml
> --- jetty9-9.4.38/jetty-continuation/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-continuation/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-continuation</artifactId>
> diff -Nru jetty9-9.4.38/jetty-deploy/pom.xml jetty9-9.4.39/jetty-deploy/pom.xml
> --- jetty9-9.4.38/jetty-deploy/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-deploy/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-deploy</artifactId>
> diff -Nru jetty9-9.4.38/jetty-deploy/src/main/java/org/eclipse/jetty/deploy/providers/ScanningAppProvider.java jetty9-9.4.39/jetty-deploy/src/main/java/org/eclipse/jetty/deploy/providers/ScanningAppProvider.java
> --- jetty9-9.4.38/jetty-deploy/src/main/java/org/eclipse/jetty/deploy/providers/ScanningAppProvider.java 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-deploy/src/main/java/org/eclipse/jetty/deploy/providers/ScanningAppProvider.java 2021-03-25 15:36:22.000000000 +0100
> @@ -49,7 +49,7 @@
> {
> private static final Logger LOG = Log.getLogger(ScanningAppProvider.class);
>
> - private Map<String, App> _appMap = new HashMap<String, App>();
> + private final Map<String, App> _appMap = new HashMap<>();
>
> private DeploymentManager _deploymentManager;
> protected FilenameFilter _filenameFilter;
> diff -Nru jetty9-9.4.38/jetty-deploy/src/main/java/org/eclipse/jetty/deploy/providers/WebAppProvider.java jetty9-9.4.39/jetty-deploy/src/main/java/org/eclipse/jetty/deploy/providers/WebAppProvider.java
> --- jetty9-9.4.38/jetty-deploy/src/main/java/org/eclipse/jetty/deploy/providers/WebAppProvider.java 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-deploy/src/main/java/org/eclipse/jetty/deploy/providers/WebAppProvider.java 2021-03-25 15:36:22.000000000 +0100
> @@ -30,6 +30,8 @@
> import org.eclipse.jetty.util.URIUtil;
> import org.eclipse.jetty.util.annotation.ManagedAttribute;
> import org.eclipse.jetty.util.annotation.ManagedObject;
> +import org.eclipse.jetty.util.log.Log;
> +import org.eclipse.jetty.util.log.Logger;
> import org.eclipse.jetty.util.resource.Resource;
> import org.eclipse.jetty.webapp.WebAppContext;
> import org.eclipse.jetty.xml.XmlConfiguration;
> @@ -62,6 +64,8 @@
> @ManagedObject("Provider for start-up deployement of webapps based on presence in directory")
> public class WebAppProvider extends ScanningAppProvider
> {
> + private static final Logger LOG = Log.getLogger(WebAppProvider.class);
> +
> private boolean _extractWars = false;
> private boolean _parentLoaderPriority = false;
> private ConfigurationManager _configurationManager;
> @@ -74,28 +78,25 @@
> @Override
> public boolean accept(File dir, String name)
> {
> - if (!dir.exists())
> - {
> + if (dir == null || !dir.exists())
> return false;
> - }
> - String lowername = name.toLowerCase(Locale.ENGLISH);
>
> - File file = new File(dir, name);
> - Resource r = Resource.newResource(file);
> - if (getMonitoredResources().contains(r) && r.isDirectory())
> - {
> - return false;
> - }
> + String lowerName = name.toLowerCase(Locale.ENGLISH);
> +
> + Resource resource = Resource.newResource(new File(dir, name));
> + for (Resource m : getMonitoredResources())
> + if (resource.isSame(m))
> + return false;
>
> // ignore hidden files
> - if (lowername.startsWith("."))
> + if (lowerName.startsWith("."))
> return false;
>
> // Ignore some directories
> - if (file.isDirectory())
> + if (resource.isDirectory())
> {
> // is it a nominated config directory
> - if (lowername.endsWith(".d"))
> + if (lowerName.endsWith(".d"))
> return false;
>
> // is it an unpacked directory for an existing war file?
> @@ -107,18 +108,18 @@
> return false;
>
> //is it a sccs dir?
> - return !"cvs".equals(lowername) && !"cvsroot".equals(lowername); // OK to deploy it then
> + return !"cvs".equals(lowerName) && !"cvsroot".equals(lowerName); // OK to deploy it then
> }
>
> // else is it a war file
> - if (lowername.endsWith(".war"))
> + if (lowerName.endsWith(".war"))
> {
> //defer deployment decision to fileChanged()
> return true;
> }
>
> - // else is it a context XML file
> - return lowername.endsWith(".xml");
> + // else is it a context XML file
> + return lowerName.endsWith(".xml");
> }
> }
>
> diff -Nru jetty9-9.4.38/jetty-deploy/src/test/java/org/eclipse/jetty/deploy/providers/WebAppProviderTest.java jetty9-9.4.39/jetty-deploy/src/test/java/org/eclipse/jetty/deploy/providers/WebAppProviderTest.java
> --- jetty9-9.4.38/jetty-deploy/src/test/java/org/eclipse/jetty/deploy/providers/WebAppProviderTest.java 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-deploy/src/test/java/org/eclipse/jetty/deploy/providers/WebAppProviderTest.java 2021-03-25 15:36:22.000000000 +0100
> @@ -19,26 +19,38 @@
> package org.eclipse.jetty.deploy.providers;
>
> import java.io.File;
> +import java.net.URL;
> import java.nio.file.FileSystemException;
> import java.nio.file.Files;
> import java.nio.file.Path;
> import java.util.Arrays;
> +import java.util.HashMap;
> +import java.util.List;
> +import java.util.Map;
>
> import org.eclipse.jetty.deploy.test.XmlConfiguredJetty;
> +import org.eclipse.jetty.server.Handler;
> +import org.eclipse.jetty.server.Server;
> +import org.eclipse.jetty.server.handler.HandlerCollection;
> import org.eclipse.jetty.toolchain.test.MavenTestingUtils;
> import org.eclipse.jetty.toolchain.test.jupiter.WorkDir;
> import org.eclipse.jetty.toolchain.test.jupiter.WorkDirExtension;
> +import org.eclipse.jetty.util.IO;
> +import org.eclipse.jetty.webapp.WebAppContext;
> import org.junit.jupiter.api.AfterEach;
> import org.junit.jupiter.api.BeforeEach;
> import org.junit.jupiter.api.Disabled;
> import org.junit.jupiter.api.Test;
> +import org.junit.jupiter.api.condition.EnabledOnOs;
> import org.junit.jupiter.api.extension.ExtendWith;
>
> +import static org.junit.jupiter.api.Assertions.assertEquals;
> import static org.junit.jupiter.api.Assertions.assertFalse;
> import static org.junit.jupiter.api.Assertions.assertTrue;
> import static org.junit.jupiter.api.Assumptions.assumeTrue;
> +import static org.junit.jupiter.api.condition.OS.LINUX;
> +import static org.junit.jupiter.api.condition.OS.MAC;
>
> -@Disabled("See issue #1200")
> @ExtendWith(WorkDirExtension.class)
> public class WebAppProviderTest
> {
> @@ -49,7 +61,8 @@
> @BeforeEach
> public void setupEnvironment() throws Exception
> {
> - jetty = new XmlConfiguredJetty(testdir.getEmptyPathDir());
> + Path p = testdir.getEmptyPathDir();
> + jetty = new XmlConfiguredJetty(p);
> jetty.addConfiguration("jetty.xml");
> jetty.addConfiguration("jetty-http.xml");
> jetty.addConfiguration("jetty-deploy-wars.xml");
> @@ -86,6 +99,7 @@
> jetty.stop();
> }
>
> + @Disabled("See issue #1200")
> @Test
> public void testStartupContext()
> {
> @@ -101,7 +115,8 @@
> // Test for correct behaviour
> assertTrue(hasJettyGeneratedPath(workDir, "foo.war"), "Should have generated directory in work directory: " + workDir);
> }
> -
> +
> + @Disabled("See issue #1200")
> @Test
> public void testStartupSymlinkContext()
> {
> @@ -119,7 +134,105 @@
> File workDir = jetty.getJettyDir("workish");
> assertTrue(hasJettyGeneratedPath(workDir, "bar.war"), "Should have generated directory in work directory: " + workDir);
> }
> +
> + @Test
> + @EnabledOnOs({LINUX})
> + public void testWebappSymlinkDir() throws Exception
> + {
> + jetty.stop(); //reconfigure jetty
> +
> + testdir.ensureEmpty();
> +
> + jetty = new XmlConfiguredJetty(testdir.getEmptyPathDir());
> + jetty.addConfiguration("jetty.xml");
> + jetty.addConfiguration("jetty-http.xml");
> + jetty.addConfiguration("jetty-deploy-wars.xml");
>
> + assumeTrue(symlinkSupported);
> +
> + //delete the existing webapps directory
> + File webapps = jetty.getJettyDir("webapps");
> + assertTrue(IO.delete(webapps));
> +
> + //make a different directory to contain webapps
> + File x = jetty.getJettyDir("x");
> + Files.createDirectory(x.toPath());
> +
> + //Put a webapp into it
> + File srcDir = MavenTestingUtils.getTestResourceDir("webapps");
> + File fooWar = new File(x, "foo.war");
> + IO.copy(new File(srcDir, "foo-webapp-1.war"), fooWar);
> + assertTrue(Files.exists(fooWar.toPath()));
> +
> + //make a link from x to webapps
> + Files.createSymbolicLink(jetty.getJettyDir("webapps").toPath(), x.toPath());
> + assertTrue(Files.exists(jetty.getJettyDir("webapps").toPath()));
> +
> + jetty.load();
> + jetty.start();
> +
> + //only webapp in x should be deployed, not x itself
> + jetty.assertWebAppContextsExists("/foo");
> + }
> +
> + @Test
> + @EnabledOnOs({LINUX})
> + public void testBaseDirSymlink() throws Exception
> + {
> + jetty.stop(); //reconfigure jetty
> +
> + testdir.ensureEmpty();
> +
> + Path realBase = testdir.getEmptyPathDir();
> +
> + //set jetty up on the real base
> + jetty = new XmlConfiguredJetty(realBase);
> + jetty.addConfiguration("jetty.xml");
> + jetty.addConfiguration("jetty-http.xml");
> + jetty.addConfiguration("jetty-deploy-wars.xml");
> +
> + //Put a webapp into the base
> + jetty.copyWebapp("foo-webapp-1.war", "foo.war");
> +
> + //create the jetty structure
> + jetty.load();
> + jetty.start();
> + Path jettyHome = jetty.getJettyHome().toPath();
> +
> + jetty.stop();
> +
> + //Make a symbolic link to the real base
> + File testsDir = MavenTestingUtils.getTargetTestingDir();
> + Path symlinkBase = Files.createSymbolicLink(testsDir.toPath().resolve("basedirsymlink-" + System.currentTimeMillis()), jettyHome);
> + Map<String, String> properties = new HashMap<>();
> + properties.put("jetty.home", jettyHome.toString());
> + //Start jetty, but this time running from the symlinked base
> + System.setProperty("jetty.home", properties.get("jetty.home"));
> +
> + List<URL> configurations = jetty.getConfigurations();
> + Server server = XmlConfiguredJetty.loadConfigurations(configurations, properties);
> +
> + try
> + {
> + server.start();
> + HandlerCollection handlers = (HandlerCollection)server.getHandler();
> + Handler[] children = server.getChildHandlersByClass(WebAppContext.class);
> + assertEquals(1, children.length);
> + assertEquals("/foo", ((WebAppContext)children[0]).getContextPath());
> + }
> + finally
> + {
> + server.stop();
> + }
> + }
> +
> + private Map<String, String> setupJettyProperties(Path jettyHome)
> + {
> + Map<String, String> properties = new HashMap<>();
> + properties.put("jetty.home", jettyHome.toFile().getAbsolutePath());
> + return properties;
> + }
> +
> private static boolean hasJettyGeneratedPath(File basedir, String expectedWarFilename)
> {
> File[] paths = basedir.listFiles();
> diff -Nru jetty9-9.4.38/jetty-deploy/src/test/java/org/eclipse/jetty/deploy/test/XmlConfiguredJetty.java jetty9-9.4.39/jetty-deploy/src/test/java/org/eclipse/jetty/deploy/test/XmlConfiguredJetty.java
> --- jetty9-9.4.38/jetty-deploy/src/test/java/org/eclipse/jetty/deploy/test/XmlConfiguredJetty.java 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-deploy/src/test/java/org/eclipse/jetty/deploy/test/XmlConfiguredJetty.java 2021-03-25 15:36:22.000000000 +0100
> @@ -31,6 +31,7 @@
> import java.net.UnknownHostException;
> import java.nio.file.Path;
> import java.util.ArrayList;
> +import java.util.Collections;
> import java.util.HashMap;
> import java.util.List;
> import java.util.Map;
> @@ -69,6 +70,51 @@
> private String _scheme = HttpScheme.HTTP.asString();
> private File _jettyHome;
>
> + public static Server loadConfigurations(List<URL> configurations, Map<String, String> properties)
> + throws Exception
> + {
> + XmlConfiguration last = null;
> + Object[] obj = new Object[configurations.size()];
> +
> + // Configure everything
> + for (int i = 0; i < configurations.size(); i++)
> + {
> + URL configURL = configurations.get(i);
> + XmlConfiguration configuration = new XmlConfiguration(configURL);
> + if (last != null)
> + configuration.getIdMap().putAll(last.getIdMap());
> + configuration.getProperties().putAll(properties);
> + obj[i] = configuration.configure();
> + last = configuration;
> + }
> +
> + // Test for Server Instance.
> + Server foundServer = null;
> + int serverCount = 0;
> + for (int i = 0; i < configurations.size(); i++)
> + {
> + if (obj[i] instanceof Server)
> + {
> + if (obj[i].equals(foundServer))
> + {
> + // Identical server instance found
> + break;
> + }
> + foundServer = (Server)obj[i];
> + serverCount++;
> + }
> + }
> +
> + if (serverCount <= 0)
> + {
> + throw new Exception("Load failed to configure a " + Server.class.getName());
> + }
> +
> + assertEquals(1, serverCount, "Server load count");
> +
> + return foundServer;
> + }
> +
> public XmlConfiguredJetty(Path testdir) throws IOException
> {
> _xmlConfigurations = new ArrayList<>();
> @@ -77,11 +123,11 @@
> String jettyHomeBase = testdir.toString();
> // Ensure we have a new (pristene) directory to work with.
> int idx = 0;
> - _jettyHome = new File(jettyHomeBase + "#" + idx);
> + _jettyHome = new File(jettyHomeBase + "--" + idx);
> while (_jettyHome.exists())
> {
> idx++;
> - _jettyHome = new File(jettyHomeBase + "#" + idx);
> + _jettyHome = new File(jettyHomeBase + "--" + idx);
> }
> deleteContents(_jettyHome);
> // Prepare Jetty.Home (Test) dir
> @@ -152,6 +198,11 @@
> {
> _xmlConfigurations.add(xmlConfig);
> }
> +
> + public List<URL> getConfigurations()
> + {
> + return Collections.unmodifiableList(_xmlConfigurations);
> + }
>
> public void assertNoWebAppContexts()
> {
> @@ -325,46 +376,7 @@
>
> public void load() throws Exception
> {
> - XmlConfiguration last = null;
> - Object[] obj = new Object[this._xmlConfigurations.size()];
> -
> - // Configure everything
> - for (int i = 0; i < this._xmlConfigurations.size(); i++)
> - {
> - URL configURL = this._xmlConfigurations.get(i);
> - XmlConfiguration configuration = new XmlConfiguration(configURL);
> - if (last != null)
> - configuration.getIdMap().putAll(last.getIdMap());
> - configuration.getProperties().putAll(_properties);
> - obj[i] = configuration.configure();
> - last = configuration;
> - }
> -
> - // Test for Server Instance.
> - Server foundServer = null;
> - int serverCount = 0;
> - for (int i = 0; i < this._xmlConfigurations.size(); i++)
> - {
> - if (obj[i] instanceof Server)
> - {
> - if (obj[i].equals(foundServer))
> - {
> - // Identical server instance found
> - break;
> - }
> - foundServer = (Server)obj[i];
> - serverCount++;
> - }
> - }
> -
> - if (serverCount <= 0)
> - {
> - throw new Exception("Load failed to configure a " + Server.class.getName());
> - }
> -
> - assertEquals(1, serverCount, "Server load count");
> -
> - this._server = foundServer;
> + this._server = loadConfigurations(_xmlConfigurations, _properties);
> this._server.setStopTimeout(10);
> }
>
> diff -Nru jetty9-9.4.38/jetty-distribution/pom.xml jetty9-9.4.39/jetty-distribution/pom.xml
> --- jetty9-9.4.38/jetty-distribution/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-distribution/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-distribution</artifactId>
> diff -Nru jetty9-9.4.38/jetty-fcgi/fcgi-client/pom.xml jetty9-9.4.39/jetty-fcgi/fcgi-client/pom.xml
> --- jetty9-9.4.38/jetty-fcgi/fcgi-client/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-fcgi/fcgi-client/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.fcgi</groupId>
> <artifactId>fcgi-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-fcgi/fcgi-server/pom.xml jetty9-9.4.39/jetty-fcgi/fcgi-server/pom.xml
> --- jetty9-9.4.38/jetty-fcgi/fcgi-server/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-fcgi/fcgi-server/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.fcgi</groupId>
> <artifactId>fcgi-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-fcgi/pom.xml jetty9-9.4.39/jetty-fcgi/pom.xml
> --- jetty9-9.4.38/jetty-fcgi/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-fcgi/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-gcloud/jetty-gcloud-session-manager/pom.xml jetty9-9.4.39/jetty-gcloud/jetty-gcloud-session-manager/pom.xml
> --- jetty9-9.4.38/jetty-gcloud/jetty-gcloud-session-manager/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-gcloud/jetty-gcloud-session-manager/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.gcloud</groupId>
> <artifactId>gcloud-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-gcloud/pom.xml jetty9-9.4.39/jetty-gcloud/pom.xml
> --- jetty9-9.4.38/jetty-gcloud/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-gcloud/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <artifactId>jetty-project</artifactId>
> <groupId>org.eclipse.jetty</groupId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-hazelcast/pom.xml jetty9-9.4.39/jetty-hazelcast/pom.xml
> --- jetty9-9.4.38/jetty-hazelcast/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-hazelcast/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-hazelcast/src/main/config/modules/session-store-hazelcast-embedded.mod jetty9-9.4.39/jetty-hazelcast/src/main/config/modules/session-store-hazelcast-embedded.mod
> --- jetty9-9.4.38/jetty-hazelcast/src/main/config/modules/session-store-hazelcast-embedded.mod 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-hazelcast/src/main/config/modules/session-store-hazelcast-embedded.mod 2021-03-25 15:36:22.000000000 +0100
> @@ -13,14 +13,17 @@
> sessions
>
> [files]
> -maven://com.hazelcast/hazelcast/3.12.10|lib/hazelcast/hazelcast-3.12.10.jar
> +maven://com.hazelcast/hazelcast/${hazelcast.version}|lib/hazelcast/hazelcast-${hazelcast.version}.jar
>
> [xml]
> etc/sessions/hazelcast/default.xml
>
> [lib]
> lib/jetty-hazelcast-${jetty.version}.jar
> -lib/hazelcast/*.jar
> +lib/hazelcast/hazelcast-${hazelcast.version}.jar
> +
> +[ini]
> +hazelcast.version?=3.12.10
>
> [license]
> Hazelcast is an open source project hosted on Github and released under the Apache 2.0 license.
> diff -Nru jetty9-9.4.38/jetty-hazelcast/src/main/config/modules/session-store-hazelcast-remote.mod jetty9-9.4.39/jetty-hazelcast/src/main/config/modules/session-store-hazelcast-remote.mod
> --- jetty9-9.4.38/jetty-hazelcast/src/main/config/modules/session-store-hazelcast-remote.mod 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-hazelcast/src/main/config/modules/session-store-hazelcast-remote.mod 2021-03-25 15:36:22.000000000 +0100
> @@ -13,15 +13,19 @@
> sessions
>
> [files]
> -maven://com.hazelcast/hazelcast/3.12.10|lib/hazelcast/hazelcast-3.12.10.jar
> -maven://com.hazelcast/hazelcast-client/3.12.6|lib/hazelcast/hazelcast-client-3.12.10.jar
> +maven://com.hazelcast/hazelcast/${hazelcast.version}|lib/hazelcast/hazelcast-${hazelcast.version}.jar
> +maven://com.hazelcast/hazelcast-client/${hazelcast.version}|lib/hazelcast/hazelcast-client-${hazelcast.version}.jar
>
> [xml]
> etc/sessions/hazelcast/remote.xml
>
> [lib]
> lib/jetty-hazelcast-${jetty.version}.jar
> -lib/hazelcast/*.jar
> +lib/hazelcast/hazelcast-${hazelcast.version}.jar
> +lib/hazelcast/hazelcast-client-${hazelcast.version}.jar
> +
> +[ini]
> +hazelcast.version?=3.12.10
>
> [license]
> Hazelcast is an open source project hosted on Github and released under the Apache 2.0 license.
> diff -Nru jetty9-9.4.38/jetty-home/pom.xml jetty9-9.4.39/jetty-home/pom.xml
> --- jetty9-9.4.38/jetty-home/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-home/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <artifactId>jetty-project</artifactId>
> <groupId>org.eclipse.jetty</groupId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-home</artifactId>
> diff -Nru jetty9-9.4.38/jetty-home/src/main/resources/modules/hawtio.mod jetty9-9.4.39/jetty-home/src/main/resources/modules/hawtio.mod
> --- jetty9-9.4.38/jetty-home/src/main/resources/modules/hawtio.mod 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-home/src/main/resources/modules/hawtio.mod 2021-03-25 15:36:22.000000000 +0100
> @@ -17,7 +17,7 @@
> [files]
> etc/hawtio/
> lib/hawtio/
> -https://oss.sonatype.org/content/repositories/public/io/hawt/hawtio-default/1.4.16/hawtio-default-1.4.16.war|lib/hawtio/hawtio.war
> +maven://io.hawt/hawtio-default/1.4.16|lib/hawtio/hawtio.war
> basehome:modules/hawtio/hawtio.xml|etc/hawtio.xml
>
> [license]
> diff -Nru jetty9-9.4.38/jetty-home/src/main/resources/modules/jminix.mod jetty9-9.4.39/jetty-home/src/main/resources/modules/jminix.mod
> --- jetty9-9.4.38/jetty-home/src/main/resources/modules/jminix.mod 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-home/src/main/resources/modules/jminix.mod 2021-03-25 15:36:22.000000000 +0100
> @@ -18,12 +18,12 @@
> [files]
> lib/jminix/
> maven://org.jminix/jminix/1.1.0|lib/jminix/jminix-1.1.0.jar
> -http://maven.restlet.com/org/restlet/org.restlet/1.1.5/org.restlet-1.1.5.jar|lib/jminix/org.restlet-1.1.5.jar
> -http://maven.restlet.com/org/restlet/org.restlet.ext.velocity/1.1.5/org.restlet.ext.velocity-1.1.5.jar|lib/jminix/org.restlet.ext.velocity-1.1.5.jar
> +https://maven.restlet.talend.com/org/restlet/org.restlet/1.1.5/org.restlet-1.1.5.jar|lib/jminix/org.restlet-1.1.5.jar
> +https://maven.restlet.talend.com/org/restlet/org.restlet.ext.velocity/1.1.5/org.restlet.ext.velocity-1.1.5.jar|lib/jminix/org.restlet.ext.velocity-1.1.5.jar
> maven://org.apache.velocity/velocity/1.5|lib/jminix/velocity-1.5.jar
> maven://oro/oro/2.0.8|lib/jminix/oro-2.0.8.jar
> -http://maven.restlet.com/com/noelios/restlet/com.noelios.restlet/1.1.5/com.noelios.restlet-1.1.5.jar|lib/jminix/com.noelios.restlet-1.1.5.jar
> -http://maven.restlet.com/com/noelios/restlet/com.noelios.restlet.ext.servlet/1.1.5/com.noelios.restlet.ext.servlet-1.1.5.jar|lib/jminix/com.noelios.restlet.ext.servlet-1.1.5.jar
> +https://maven.restlet.talend.com/com/noelios/restlet/com.noelios.restlet/1.1.5/com.noelios.restlet-1.1.5.jar|lib/jminix/com.noelios.restlet-1.1.5.jar
> +https://maven.restlet.talend.com/com/noelios/restlet/com.noelios.restlet.ext.servlet/1.1.5/com.noelios.restlet.ext.servlet-1.1.5.jar|lib/jminix/com.noelios.restlet.ext.servlet-1.1.5.jar
> maven://net.sf.json-lib/json-lib/2.2.3/jar/jdk15|lib/jminix/json-lib-2.2.3-jdk15.jar
> maven://commons-lang/commons-lang/2.4|lib/jminix/commons-lang-2.4.jar
> maven://commons-beanutils/commons-beanutils/1.7.0|lib/jminix/commons-beanutils-1.7.0.jar
> diff -Nru jetty9-9.4.38/jetty-http/pom.xml jetty9-9.4.39/jetty-http/pom.xml
> --- jetty9-9.4.38/jetty-http/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-http/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <artifactId>jetty-project</artifactId>
> <groupId>org.eclipse.jetty</groupId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-http</artifactId>
> diff -Nru jetty9-9.4.38/jetty-http2/http2-alpn-tests/pom.xml jetty9-9.4.39/jetty-http2/http2-alpn-tests/pom.xml
> --- jetty9-9.4.38/jetty-http2/http2-alpn-tests/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-http2/http2-alpn-tests/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.http2</groupId>
> <artifactId>http2-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-http2/http2-client/pom.xml jetty9-9.4.39/jetty-http2/http2-client/pom.xml
> --- jetty9-9.4.38/jetty-http2/http2-client/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-http2/http2-client/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.http2</groupId>
> <artifactId>http2-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-http2/http2-common/pom.xml jetty9-9.4.39/jetty-http2/http2-common/pom.xml
> --- jetty9-9.4.38/jetty-http2/http2-common/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-http2/http2-common/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.http2</groupId>
> <artifactId>http2-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-http2/http2-hpack/pom.xml jetty9-9.4.39/jetty-http2/http2-hpack/pom.xml
> --- jetty9-9.4.38/jetty-http2/http2-hpack/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-http2/http2-hpack/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.http2</groupId>
> <artifactId>http2-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-http2/http2-http-client-transport/pom.xml jetty9-9.4.39/jetty-http2/http2-http-client-transport/pom.xml
> --- jetty9-9.4.38/jetty-http2/http2-http-client-transport/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-http2/http2-http-client-transport/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.http2</groupId>
> <artifactId>http2-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-http2/http2-server/pom.xml jetty9-9.4.39/jetty-http2/http2-server/pom.xml
> --- jetty9-9.4.38/jetty-http2/http2-server/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-http2/http2-server/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.http2</groupId>
> <artifactId>http2-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-http2/pom.xml jetty9-9.4.39/jetty-http2/pom.xml
> --- jetty9-9.4.38/jetty-http2/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-http2/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <artifactId>jetty-project</artifactId>
> <groupId>org.eclipse.jetty</groupId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-http-spi/pom.xml jetty9-9.4.39/jetty-http-spi/pom.xml
> --- jetty9-9.4.38/jetty-http-spi/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-http-spi/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-http-spi</artifactId>
> diff -Nru jetty9-9.4.38/jetty-infinispan/infinispan-common/pom.xml jetty9-9.4.39/jetty-infinispan/infinispan-common/pom.xml
> --- jetty9-9.4.38/jetty-infinispan/infinispan-common/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-infinispan/infinispan-common/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>infinispan-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>infinispan-common</artifactId>
> diff -Nru jetty9-9.4.38/jetty-infinispan/infinispan-embedded/pom.xml jetty9-9.4.39/jetty-infinispan/infinispan-embedded/pom.xml
> --- jetty9-9.4.38/jetty-infinispan/infinispan-embedded/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-infinispan/infinispan-embedded/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>infinispan-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>infinispan-embedded</artifactId>
> diff -Nru jetty9-9.4.38/jetty-infinispan/infinispan-embedded-query/pom.xml jetty9-9.4.39/jetty-infinispan/infinispan-embedded-query/pom.xml
> --- jetty9-9.4.38/jetty-infinispan/infinispan-embedded-query/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-infinispan/infinispan-embedded-query/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>infinispan-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>infinispan-embedded-query</artifactId>
> diff -Nru jetty9-9.4.38/jetty-infinispan/infinispan-remote/pom.xml jetty9-9.4.39/jetty-infinispan/infinispan-remote/pom.xml
> --- jetty9-9.4.38/jetty-infinispan/infinispan-remote/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-infinispan/infinispan-remote/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>infinispan-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>infinispan-remote</artifactId>
> diff -Nru jetty9-9.4.38/jetty-infinispan/infinispan-remote-query/pom.xml jetty9-9.4.39/jetty-infinispan/infinispan-remote-query/pom.xml
> --- jetty9-9.4.38/jetty-infinispan/infinispan-remote-query/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-infinispan/infinispan-remote-query/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>infinispan-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>infinispan-remote-query</artifactId>
> @@ -138,5 +138,10 @@
> <artifactId>testcontainers</artifactId>
> <scope>test</scope>
> </dependency>
> + <dependency>
> + <groupId>org.testcontainers</groupId>
> + <artifactId>junit-jupiter</artifactId>
> + <scope>test</scope>
> + </dependency>
> </dependencies>
> </project>
> diff -Nru jetty9-9.4.38/jetty-infinispan/infinispan-remote-query/src/test/java/org/eclipse/jetty/server/session/infinispan/RemoteQueryManagerTest.java jetty9-9.4.39/jetty-infinispan/infinispan-remote-query/src/test/java/org/eclipse/jetty/server/session/infinispan/RemoteQueryManagerTest.java
> --- jetty9-9.4.38/jetty-infinispan/infinispan-remote-query/src/test/java/org/eclipse/jetty/server/session/infinispan/RemoteQueryManagerTest.java 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-infinispan/infinispan-remote-query/src/test/java/org/eclipse/jetty/server/session/infinispan/RemoteQueryManagerTest.java 2021-03-25 15:36:22.000000000 +0100
> @@ -49,11 +49,13 @@
> import org.testcontainers.containers.GenericContainer;
> import org.testcontainers.containers.output.Slf4jLogConsumer;
> import org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy;
> +import org.testcontainers.junit.jupiter.Testcontainers;
>
> import static org.junit.jupiter.api.Assertions.assertEquals;
> import static org.junit.jupiter.api.Assertions.assertNotNull;
> import static org.junit.jupiter.api.Assertions.assertTrue;
>
> +@Testcontainers(disabledWithoutDocker = true)
> public class RemoteQueryManagerTest
> {
> public static final String DEFAULT_CACHE_NAME = "remote-session-test";
> diff -Nru jetty9-9.4.38/jetty-infinispan/pom.xml jetty9-9.4.39/jetty-infinispan/pom.xml
> --- jetty9-9.4.38/jetty-infinispan/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-infinispan/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-io/pom.xml jetty9-9.4.39/jetty-io/pom.xml
> --- jetty9-9.4.38/jetty-io/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-io/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <artifactId>jetty-project</artifactId>
> <groupId>org.eclipse.jetty</groupId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-io</artifactId>
> diff -Nru jetty9-9.4.38/jetty-io/src/main/java/org/eclipse/jetty/io/ssl/SslConnection.java jetty9-9.4.39/jetty-io/src/main/java/org/eclipse/jetty/io/ssl/SslConnection.java
> --- jetty9-9.4.38/jetty-io/src/main/java/org/eclipse/jetty/io/ssl/SslConnection.java 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-io/src/main/java/org/eclipse/jetty/io/ssl/SslConnection.java 2021-03-25 15:36:22.000000000 +0100
> @@ -729,8 +729,15 @@
> return filled = -1;
>
> case BUFFER_UNDERFLOW:
> + if (BufferUtil.space(_encryptedInput) == 0)
> + {
> + BufferUtil.clear(_encryptedInput);
> + throw new SSLHandshakeException("Encrypted buffer max length exceeded");
> + }
> +
> if (netFilled > 0)
> continue; // try filling some more
> +
> _underflown = true;
> if (netFilled < 0 && _sslEngine.getUseClientMode())
> {
> @@ -739,7 +746,7 @@
> {
> Throwable handshakeFailure = new SSLHandshakeException("Abruptly closed by peer");
> if (closeFailure != null)
> - handshakeFailure.initCause(closeFailure);
> + handshakeFailure.addSuppressed(closeFailure);
> throw handshakeFailure;
> }
> return filled = -1;
> diff -Nru jetty9-9.4.38/jetty-jaas/pom.xml jetty9-9.4.39/jetty-jaas/pom.xml
> --- jetty9-9.4.38/jetty-jaas/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-jaas/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-jaas</artifactId>
> diff -Nru jetty9-9.4.38/jetty-jaspi/pom.xml jetty9-9.4.39/jetty-jaspi/pom.xml
> --- jetty9-9.4.38/jetty-jaspi/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-jaspi/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-jmh/pom.xml jetty9-9.4.39/jetty-jmh/pom.xml
> --- jetty9-9.4.38/jetty-jmh/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-jmh/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-jmx/pom.xml jetty9-9.4.39/jetty-jmx/pom.xml
> --- jetty9-9.4.38/jetty-jmx/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-jmx/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-jmx</artifactId>
> diff -Nru jetty9-9.4.38/jetty-jndi/pom.xml jetty9-9.4.39/jetty-jndi/pom.xml
> --- jetty9-9.4.38/jetty-jndi/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-jndi/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-jndi</artifactId>
> diff -Nru jetty9-9.4.38/jetty-jspc-maven-plugin/pom.xml jetty9-9.4.39/jetty-jspc-maven-plugin/pom.xml
> --- jetty9-9.4.38/jetty-jspc-maven-plugin/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-jspc-maven-plugin/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-jspc-maven-plugin</artifactId>
> diff -Nru jetty9-9.4.38/jetty-maven-plugin/pom.xml jetty9-9.4.39/jetty-maven-plugin/pom.xml
> --- jetty9-9.4.38/jetty-maven-plugin/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-maven-plugin/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-maven-plugin</artifactId>
> diff -Nru jetty9-9.4.38/jetty-memcached/jetty-memcached-sessions/pom.xml jetty9-9.4.39/jetty-memcached/jetty-memcached-sessions/pom.xml
> --- jetty9-9.4.38/jetty-memcached/jetty-memcached-sessions/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-memcached/jetty-memcached-sessions/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.memcached</groupId>
> <artifactId>memcached-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-memcached/pom.xml jetty9-9.4.39/jetty-memcached/pom.xml
> --- jetty9-9.4.38/jetty-memcached/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-memcached/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <artifactId>jetty-project</artifactId>
> <groupId>org.eclipse.jetty</groupId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-nosql/pom.xml jetty9-9.4.39/jetty-nosql/pom.xml
> --- jetty9-9.4.38/jetty-nosql/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-nosql/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-nosql</artifactId>
> diff -Nru jetty9-9.4.38/jetty-openid/pom.xml jetty9-9.4.39/jetty-openid/pom.xml
> --- jetty9-9.4.38/jetty-openid/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-openid/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-osgi/jetty-osgi-alpn/pom.xml jetty9-9.4.39/jetty-osgi/jetty-osgi-alpn/pom.xml
> --- jetty9-9.4.38/jetty-osgi/jetty-osgi-alpn/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-osgi/jetty-osgi-alpn/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty.osgi</groupId>
> <artifactId>jetty-osgi-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-osgi-alpn</artifactId>
> diff -Nru jetty9-9.4.38/jetty-osgi/jetty-osgi-boot/pom.xml jetty9-9.4.39/jetty-osgi/jetty-osgi-boot/pom.xml
> --- jetty9-9.4.38/jetty-osgi/jetty-osgi-boot/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-osgi/jetty-osgi-boot/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty.osgi</groupId>
> <artifactId>jetty-osgi-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-osgi-boot</artifactId>
> diff -Nru jetty9-9.4.38/jetty-osgi/jetty-osgi-boot-jsp/pom.xml jetty9-9.4.39/jetty-osgi/jetty-osgi-boot-jsp/pom.xml
> --- jetty9-9.4.38/jetty-osgi/jetty-osgi-boot-jsp/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-osgi/jetty-osgi-boot-jsp/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty.osgi</groupId>
> <artifactId>jetty-osgi-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-osgi-boot-jsp</artifactId>
> diff -Nru jetty9-9.4.38/jetty-osgi/jetty-osgi-boot-warurl/pom.xml jetty9-9.4.39/jetty-osgi/jetty-osgi-boot-warurl/pom.xml
> --- jetty9-9.4.38/jetty-osgi/jetty-osgi-boot-warurl/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-osgi/jetty-osgi-boot-warurl/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty.osgi</groupId>
> <artifactId>jetty-osgi-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> <relativePath>../pom.xml</relativePath>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-osgi/jetty-osgi-httpservice/pom.xml jetty9-9.4.39/jetty-osgi/jetty-osgi-httpservice/pom.xml
> --- jetty9-9.4.38/jetty-osgi/jetty-osgi-httpservice/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-osgi/jetty-osgi-httpservice/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty.osgi</groupId>
> <artifactId>jetty-osgi-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-httpservice</artifactId>
> diff -Nru jetty9-9.4.38/jetty-osgi/pom.xml jetty9-9.4.39/jetty-osgi/pom.xml
> --- jetty9-9.4.38/jetty-osgi/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-osgi/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-osgi/test-jetty-osgi/pom.xml jetty9-9.4.39/jetty-osgi/test-jetty-osgi/pom.xml
> --- jetty9-9.4.38/jetty-osgi/test-jetty-osgi/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-osgi/test-jetty-osgi/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty.osgi</groupId>
> <artifactId>jetty-osgi-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> <relativePath>../pom.xml</relativePath>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-osgi/test-jetty-osgi-context/pom.xml jetty9-9.4.39/jetty-osgi/test-jetty-osgi-context/pom.xml
> --- jetty9-9.4.38/jetty-osgi/test-jetty-osgi-context/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-osgi/test-jetty-osgi-context/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty.osgi</groupId>
> <artifactId>jetty-osgi-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>test-jetty-osgi-context</artifactId>
> diff -Nru jetty9-9.4.38/jetty-osgi/test-jetty-osgi-fragment/pom.xml jetty9-9.4.39/jetty-osgi/test-jetty-osgi-fragment/pom.xml
> --- jetty9-9.4.38/jetty-osgi/test-jetty-osgi-fragment/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-osgi/test-jetty-osgi-fragment/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty.osgi</groupId>
> <artifactId>jetty-osgi-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> <relativePath>../pom.xml</relativePath>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-osgi/test-jetty-osgi-server/pom.xml jetty9-9.4.39/jetty-osgi/test-jetty-osgi-server/pom.xml
> --- jetty9-9.4.38/jetty-osgi/test-jetty-osgi-server/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-osgi/test-jetty-osgi-server/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty.osgi</groupId>
> <artifactId>jetty-osgi-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>test-jetty-osgi-server</artifactId>
> diff -Nru jetty9-9.4.38/jetty-osgi/test-jetty-osgi-webapp/pom.xml jetty9-9.4.39/jetty-osgi/test-jetty-osgi-webapp/pom.xml
> --- jetty9-9.4.38/jetty-osgi/test-jetty-osgi-webapp/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-osgi/test-jetty-osgi-webapp/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty.osgi</groupId>
> <artifactId>jetty-osgi-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> <relativePath>../pom.xml</relativePath>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-osgi/test-jetty-osgi-webapp-resources/pom.xml jetty9-9.4.39/jetty-osgi/test-jetty-osgi-webapp-resources/pom.xml
> --- jetty9-9.4.38/jetty-osgi/test-jetty-osgi-webapp-resources/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-osgi/test-jetty-osgi-webapp-resources/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.osgi</groupId>
> <artifactId>jetty-osgi-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>test-jetty-osgi-webapp-resources</artifactId>
> diff -Nru jetty9-9.4.38/jetty-plus/pom.xml jetty9-9.4.39/jetty-plus/pom.xml
> --- jetty9-9.4.38/jetty-plus/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-plus/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-plus</artifactId>
> diff -Nru jetty9-9.4.38/jetty-proxy/pom.xml jetty9-9.4.39/jetty-proxy/pom.xml
> --- jetty9-9.4.38/jetty-proxy/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-proxy/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-proxy</artifactId>
> diff -Nru jetty9-9.4.38/jetty-quickstart/pom.xml jetty9-9.4.39/jetty-quickstart/pom.xml
> --- jetty9-9.4.38/jetty-quickstart/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-quickstart/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <groupId>org.eclipse.jetty</groupId>
> diff -Nru jetty9-9.4.38/jetty-rewrite/pom.xml jetty9-9.4.39/jetty-rewrite/pom.xml
> --- jetty9-9.4.38/jetty-rewrite/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-rewrite/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-rewrite</artifactId>
> diff -Nru jetty9-9.4.38/jetty-runner/pom.xml jetty9-9.4.39/jetty-runner/pom.xml
> --- jetty9-9.4.38/jetty-runner/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-runner/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-runner</artifactId>
> diff -Nru jetty9-9.4.38/jetty-security/pom.xml jetty9-9.4.39/jetty-security/pom.xml
> --- jetty9-9.4.38/jetty-security/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-security/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-security</artifactId>
> diff -Nru jetty9-9.4.38/jetty-server/pom.xml jetty9-9.4.39/jetty-server/pom.xml
> --- jetty9-9.4.38/jetty-server/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-server/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-server</artifactId>
> diff -Nru jetty9-9.4.38/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java jetty9-9.4.39/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java
> --- jetty9-9.4.38/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java 2021-03-25 15:36:22.000000000 +0100
> @@ -1824,7 +1824,8 @@
> setMethod(request.getMethod());
> HttpURI uri = request.getURI();
>
> - if (uri.isAmbiguous())
> + boolean ambiguous = uri.isAmbiguous();
> + if (ambiguous)
> {
> // replaced in jetty-10 with URICompliance from the HttpConfiguration
> Connection connection = _channel == null ? null : _channel.getConnection();
> @@ -1852,6 +1853,13 @@
> else if (encoded.startsWith("/"))
> {
> path = (encoded.length() == 1) ? "/" : uri.getDecodedPath();
> +
> + // Strictly speaking if a URI is legal and encodes ambiguous segments, then they should be
> + // reflected in the decoded string version. However, previous behaviour was to always normalize
> + // so we will continue to do so. If an application wishes to see ambiguous URIs, then they can look
> + // at the encoded form of the URI
> + if (ambiguous)
> + path = URIUtil.canonicalPath(path);
> }
> else if ("*".equals(encoded) || HttpMethod.CONNECT.is(getMethod()))
> {
> diff -Nru jetty9-9.4.38/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionHandler.java jetty9-9.4.39/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionHandler.java
> --- jetty9-9.4.38/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionHandler.java 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionHandler.java 2021-03-25 15:36:22.000000000 +0100
> @@ -1667,29 +1667,56 @@
> if (LOG.isDebugEnabled())
> LOG.debug("Got Session ID {} from cookie {}", id, sessionCookie);
>
> - HttpSession s = getHttpSession(id);
> -
> - if (requestedSessionId == null)
> - {
> - //no previous id, always accept this one
> - requestedSessionId = id;
> - session = s;
> - }
> - else if (requestedSessionId.equals(id))
> - {
> - //really a bad request, but will forgive the duplication
> - }
> - else if (session == null || !isValid(session))
> + if (session == null)
> {
> - //no previous session or invalid, accept this one
> - requestedSessionId = id;
> - session = s;
> + //we currently do not have a session selected, use this one if it is valid
> + HttpSession s = getHttpSession(id);
> + if (s != null && isValid(s))
> + {
> + //associate it with the request so its reference count is decremented as the
> + //request exits
> + requestedSessionId = id;
> + session = s;
> + baseRequest.enterSession(session);
> + baseRequest.setSession(session);
> +
> + if (LOG.isDebugEnabled())
> + LOG.debug("Selected session {}", session);
> + }
> + else
> + {
> + if (LOG.isDebugEnabled())
> + LOG.debug("No session found for session cookie id {}", id);
> +
> + //if we don't have a valid session id yet, just choose the current id
> + if (requestedSessionId == null)
> + requestedSessionId = id;
> + }
> }
> else
> {
> - //previous session is valid, use it unless both valid
> - if (s != null && isValid(s))
> - throw new BadMessageException("Duplicate valid session cookies: " + requestedSessionId + "," + id);
> + //we currently have a valid session selected. We will throw an error
> + //if there is a _different_ valid session id cookie. Duplicate ids, or
> + //invalid session ids are ignored
> + if (!session.getId().equals(getSessionIdManager().getId(id)))
> + {
> + //load the session to see if it is valid or not
> + HttpSession s = getHttpSession(id);
> + if (s != null && isValid(s))
> + {
> + //associate it with the request so its reference count is decremented as the
> + //request exits
> + baseRequest.enterSession(s);
> + if (LOG.isDebugEnabled())
> + LOG.debug("Multiple different valid session ids: {}, {}", requestedSessionId, id);
> + throw new BadMessageException("Duplicate valid session cookies: " + requestedSessionId + " ," + id);
> + }
> + }
> + else
> + {
> + if (LOG.isDebugEnabled())
> + LOG.debug("Duplicate valid session cookie id: {}", id);
> + }
> }
> }
> }
> @@ -1718,24 +1745,22 @@
>
> requestedSessionId = uri.substring(s, i);
> requestedSessionIdFromCookie = false;
> +
> if (LOG.isDebugEnabled())
> LOG.debug("Got Session ID {} from URL", requestedSessionId);
> +
> session = getHttpSession(requestedSessionId);
> + if (session != null && isValid(session))
> + {
> + baseRequest.enterSession(session); //request enters this session for first time
> + baseRequest.setSession(session); //associate the session with the request
> + }
> }
> }
> }
>
> baseRequest.setRequestedSessionId(requestedSessionId);
> baseRequest.setRequestedSessionIdFromCookie(requestedSessionId != null && requestedSessionIdFromCookie);
> -
> - if (requestedSessionId != null)
> - {
> - if (session != null && isValid(session))
> - {
> - baseRequest.enterSession(session); //request enters this session for first time
> - baseRequest.setSession(session); //associate the session with the request
> - }
> - }
> }
>
> /**
> diff -Nru jetty9-9.4.38/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SniSslConnectionFactoryTest.java jetty9-9.4.39/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SniSslConnectionFactoryTest.java
> --- jetty9-9.4.38/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SniSslConnectionFactoryTest.java 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SniSslConnectionFactoryTest.java 2021-03-25 15:36:22.000000000 +0100
> @@ -32,6 +32,7 @@
> import java.util.Queue;
> import java.util.concurrent.LinkedBlockingQueue;
> import java.util.function.Consumer;
> +import java.util.stream.Collectors;
> import javax.net.ssl.SNIHostName;
> import javax.net.ssl.SNIServerName;
> import javax.net.ssl.SSLEngine;
> @@ -61,6 +62,7 @@
> import org.eclipse.jetty.util.IO;
> import org.eclipse.jetty.util.ssl.SniX509ExtendedKeyManager;
> import org.eclipse.jetty.util.ssl.SslContextFactory;
> +import org.eclipse.jetty.util.ssl.X509;
> import org.hamcrest.Matchers;
> import org.junit.jupiter.api.AfterEach;
> import org.junit.jupiter.api.BeforeEach;
> @@ -189,7 +191,27 @@
> @Test
> public void testSNIConnect() throws Exception
> {
> - start("src/test/resources/keystore_sni.p12");
> + start(ssl ->
> + {
> + ssl.setKeyStorePath("src/test/resources/keystore_sni.p12");
> + ssl.setSNISelector((keyType, issuers, session, sniHost, certificates) ->
> + {
> + // Make sure the *.domain.com comes before sub.domain.com
> + // to test that we prefer more specific domains.
> + List<X509> sortedCertificates = certificates.stream()
> + // As sorted() sorts ascending, make *.domain.com the smallest.
> + .sorted((x509a, x509b) ->
> + {
> + if (x509a.matches("domain.com"))
> + return -1;
> + if (x509b.matches("domain.com"))
> + return 1;
> + return 0;
> + })
> + .collect(Collectors.toList());
> + return ssl.sniSelect(keyType, issuers, session, sniHost, sortedCertificates);
> + });
> + });
>
> String response = getResponse("jetty.eclipse.org", "jetty.eclipse.org");
> assertThat(response, Matchers.containsString("X-HOST: jetty.eclipse.org"));
> @@ -200,6 +222,9 @@
> response = getResponse("foo.domain.com", "*.domain.com");
> assertThat(response, Matchers.containsString("X-HOST: foo.domain.com"));
>
> + response = getResponse("sub.domain.com", "sub.domain.com");
> + assertThat(response, Matchers.containsString("X-HOST: sub.domain.com"));
> +
> response = getResponse("m.san.com", "san example");
> assertThat(response, Matchers.containsString("X-HOST: m.san.com"));
>
> diff -Nru jetty9-9.4.38/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SSLEngineTest.java jetty9-9.4.39/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SSLEngineTest.java
> --- jetty9-9.4.38/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SSLEngineTest.java 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SSLEngineTest.java 2021-03-25 15:36:22.000000000 +0100
> @@ -34,19 +34,31 @@
> import java.net.SocketException;
> import java.net.SocketTimeoutException;
> import java.net.URL;
> +import java.nio.ByteBuffer;
> +import java.util.Arrays;
> +import java.util.concurrent.atomic.AtomicLong;
> +import javax.net.SocketFactory;
> import javax.net.ssl.HostnameVerifier;
> import javax.net.ssl.HttpsURLConnection;
> import javax.net.ssl.SSLContext;
> +import javax.net.ssl.SSLEngine;
> +import javax.net.ssl.SSLEngineResult;
> +import javax.net.ssl.SSLException;
> import javax.net.ssl.SSLSession;
> import javax.servlet.ServletException;
> import javax.servlet.ServletOutputStream;
> import javax.servlet.http.HttpServletRequest;
> import javax.servlet.http.HttpServletResponse;
>
> +import org.eclipse.jetty.io.EndPoint;
> +import org.eclipse.jetty.io.ssl.SslConnection;
> +import org.eclipse.jetty.server.ConnectionFactory;
> +import org.eclipse.jetty.server.Connector;
> import org.eclipse.jetty.server.HttpConnectionFactory;
> import org.eclipse.jetty.server.Request;
> import org.eclipse.jetty.server.Server;
> import org.eclipse.jetty.server.ServerConnector;
> +import org.eclipse.jetty.server.SslConnectionFactory;
> import org.eclipse.jetty.server.handler.AbstractHandler;
> import org.eclipse.jetty.toolchain.test.MavenTestingUtils;
> import org.eclipse.jetty.util.IO;
> @@ -59,6 +71,7 @@
> import static org.hamcrest.MatcherAssert.assertThat;
> import static org.hamcrest.Matchers.greaterThan;
> import static org.hamcrest.Matchers.is;
> +import static org.hamcrest.Matchers.lessThan;
> import static org.junit.jupiter.api.Assertions.assertEquals;
> import static org.junit.jupiter.api.Assertions.assertNotNull;
>
> @@ -106,12 +119,13 @@
>
> private Server server;
> private ServerConnector connector;
> + private SslContextFactory.Server sslContextFactory;
>
> @BeforeEach
> public void startServer() throws Exception
> {
> String keystore = MavenTestingUtils.getTestResourceFile("keystore").getAbsolutePath();
> - SslContextFactory sslContextFactory = new SslContextFactory.Server();
> + sslContextFactory = new SslContextFactory.Server();
> sslContextFactory.setKeyStorePath(keystore);
> sslContextFactory.setKeyStorePassword("storepwd");
> sslContextFactory.setKeyManagerPassword("keypwd");
> @@ -192,6 +206,61 @@
> }
>
> @Test
> + public void testInvalidLargeTLSFrame() throws Exception
> + {
> + AtomicLong unwraps = new AtomicLong();
> + ConnectionFactory http = connector.getConnectionFactory(HttpConnectionFactory.class);
> + ConnectionFactory ssl = new SslConnectionFactory(sslContextFactory, http.getProtocol())
> + {
> + @Override
> + protected SslConnection newSslConnection(Connector connector, EndPoint endPoint, SSLEngine engine)
> + {
> + return new SslConnection(connector.getByteBufferPool(), connector.getExecutor(), endPoint, engine, isDirectBuffersForEncryption(), isDirectBuffersForDecryption())
> + {
> + @Override
> + protected SSLEngineResult unwrap(SSLEngine sslEngine, ByteBuffer input, ByteBuffer output) throws SSLException
> + {
> + unwraps.incrementAndGet();
> + return super.unwrap(sslEngine, input, output);
> + }
> + };
> + }
> + };
> + ServerConnector tlsConnector = new ServerConnector(server, 1, 1, ssl, http);
> + server.addConnector(tlsConnector);
> + server.setHandler(new HelloWorldHandler());
> + server.start();
> +
> + // Create raw TLS record.
> + byte[] bytes = new byte[20005];
> + Arrays.fill(bytes, (byte)1);
> +
> + bytes[0] = 22; // record type
> + bytes[1] = 3; // major version
> + bytes[2] = 3; // minor version
> + bytes[3] = 78; // record length 2 bytes / 0x4E20 / decimal 20,000
> + bytes[4] = 32; // record length
> + bytes[5] = 1; // message type
> + bytes[6] = 0; // message length 3 bytes / 0x004E17 / decimal 19,991
> + bytes[7] = 78;
> + bytes[8] = 23;
> +
> + SocketFactory socketFactory = SocketFactory.getDefault();
> + try (Socket client = socketFactory.createSocket("localhost", tlsConnector.getLocalPort()))
> + {
> + client.getOutputStream().write(bytes);
> +
> + // Sleep to see if the server spins.
> + Thread.sleep(1000);
> + assertThat(unwraps.get(), lessThan(128L));
> +
> + // Read until -1 or read timeout.
> + client.setSoTimeout(1000);
> + IO.readBytes(client.getInputStream());
> + }
> + }
> +
> + @Test
> public void testRequestJettyHttps() throws Exception
> {
> server.setHandler(new HelloWorldHandler());
> Binary files /tmp/xNV5seqXro/jetty9-9.4.38/jetty-server/src/test/resources/keystore_sni.p12 and /tmp/7J4C5W4awH/jetty9-9.4.39/jetty-server/src/test/resources/keystore_sni.p12 differ
> diff -Nru jetty9-9.4.38/jetty-servlet/pom.xml jetty9-9.4.39/jetty-servlet/pom.xml
> --- jetty9-9.4.38/jetty-servlet/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-servlet/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <artifactId>jetty-project</artifactId>
> <groupId>org.eclipse.jetty</groupId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-servlet</artifactId>
> diff -Nru jetty9-9.4.38/jetty-servlets/pom.xml jetty9-9.4.39/jetty-servlets/pom.xml
> --- jetty9-9.4.38/jetty-servlets/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-servlets/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <artifactId>jetty-project</artifactId>
> <groupId>org.eclipse.jetty</groupId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-servlets</artifactId>
> diff -Nru jetty9-9.4.38/jetty-spring/pom.xml jetty9-9.4.39/jetty-spring/pom.xml
> --- jetty9-9.4.38/jetty-spring/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-spring/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-spring</artifactId>
> diff -Nru jetty9-9.4.38/jetty-start/pom.xml jetty9-9.4.39/jetty-start/pom.xml
> --- jetty9-9.4.38/jetty-start/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-start/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-start</artifactId>
> diff -Nru jetty9-9.4.38/jetty-unixsocket/pom.xml jetty9-9.4.39/jetty-unixsocket/pom.xml
> --- jetty9-9.4.38/jetty-unixsocket/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-unixsocket/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-unixsocket</artifactId>
> diff -Nru jetty9-9.4.38/jetty-util/pom.xml jetty9-9.4.39/jetty-util/pom.xml
> --- jetty9-9.4.38/jetty-util/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-util/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-util</artifactId>
> diff -Nru jetty9-9.4.38/jetty-util/src/main/config/modules/log4j2-api.mod jetty9-9.4.39/jetty-util/src/main/config/modules/log4j2-api.mod
> --- jetty9-9.4.38/jetty-util/src/main/config/modules/log4j2-api.mod 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-util/src/main/config/modules/log4j2-api.mod 2021-03-25 15:36:22.000000000 +0100
> @@ -23,6 +23,6 @@
> http://www.apache.org/licenses/LICENSE-2.0.html
>
> [ini]
> -log4j2.version?=2.11.2
> +log4j2.version?=2.14.0
> disruptor.version=3.4.2
> jetty.webapp.addServerClasses+=,${jetty.base.uri}/lib/log4j2/
> diff -Nru jetty9-9.4.38/jetty-util/src/main/java/org/eclipse/jetty/util/ModuleLocation.java jetty9-9.4.39/jetty-util/src/main/java/org/eclipse/jetty/util/ModuleLocation.java
> --- jetty9-9.4.38/jetty-util/src/main/java/org/eclipse/jetty/util/ModuleLocation.java 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-util/src/main/java/org/eclipse/jetty/util/ModuleLocation.java 2021-03-25 15:36:22.000000000 +0100
> @@ -23,6 +23,7 @@
> import java.lang.reflect.Method;
> import java.net.URI;
> import java.util.Optional;
> +import java.util.function.Function;
>
> import org.eclipse.jetty.util.log.Log;
> import org.eclipse.jetty.util.log.Logger;
> @@ -53,7 +54,7 @@
> *
> * In Jetty 10, this entire class can be moved to direct calls to java.lang.Module in TypeUtil.getModuleLocation()
> */
> -class ModuleLocation
> +class ModuleLocation implements Function<Class<?>, URI>
> {
> private static final Logger LOG = Log.getLogger(ModuleLocation.class);
>
> @@ -100,7 +101,8 @@
> }
> }
>
> - public URI getModuleLocation(Class<?> clazz)
> + @Override
> + public URI apply(Class<?> clazz)
> {
> try
> {
> diff -Nru jetty9-9.4.38/jetty-util/src/main/java/org/eclipse/jetty/util/resource/FileResource.java jetty9-9.4.39/jetty-util/src/main/java/org/eclipse/jetty/util/resource/FileResource.java
> --- jetty9-9.4.38/jetty-util/src/main/java/org/eclipse/jetty/util/resource/FileResource.java 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-util/src/main/java/org/eclipse/jetty/util/resource/FileResource.java 2021-03-25 15:36:22.000000000 +0100
> @@ -29,7 +29,9 @@
> import java.net.URLConnection;
> import java.nio.channels.FileChannel;
> import java.nio.channels.ReadableByteChannel;
> +import java.nio.file.Files;
> import java.nio.file.InvalidPathException;
> +import java.nio.file.Path;
> import java.nio.file.StandardOpenOption;
> import java.security.Permission;
>
> @@ -184,6 +186,30 @@
> _alias = checkFileAlias(_uri, _file);
> }
>
> + @Override
> + public boolean isSame(Resource resource)
> + {
> + try
> + {
> + if (resource instanceof PathResource)
> + {
> + Path path = ((PathResource)resource).getPath();
> + return Files.isSameFile(getFile().toPath(), path);
> + }
> + if (resource instanceof FileResource)
> + {
> + Path path = ((FileResource)resource).getFile().toPath();
> + return Files.isSameFile(getFile().toPath(), path);
> + }
> + }
> + catch (IOException e)
> + {
> + if (LOG.isDebugEnabled())
> + LOG.debug("ignored", e);
> + }
> + return false;
> + }
> +
> private static URI normalizeURI(File file, URI uri) throws URISyntaxException
> {
> String u = uri.toASCIIString();
> diff -Nru jetty9-9.4.38/jetty-util/src/main/java/org/eclipse/jetty/util/resource/PathResource.java jetty9-9.4.39/jetty-util/src/main/java/org/eclipse/jetty/util/resource/PathResource.java
> --- jetty9-9.4.38/jetty-util/src/main/java/org/eclipse/jetty/util/resource/PathResource.java 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-util/src/main/java/org/eclipse/jetty/util/resource/PathResource.java 2021-03-25 15:36:22.000000000 +0100
> @@ -337,6 +337,30 @@
> }
>
> @Override
> + public boolean isSame(Resource resource)
> + {
> + try
> + {
> + if (resource instanceof PathResource)
> + {
> + Path path = ((PathResource)resource).getPath();
> + return Files.isSameFile(getPath(), path);
> + }
> + if (resource instanceof FileResource)
> + {
> + Path path = ((FileResource)resource).getFile().toPath();
> + return Files.isSameFile(getPath(), path);
> + }
> + }
> + catch (IOException e)
> + {
> + if (LOG.isDebugEnabled())
> + LOG.debug("ignored", e);
> + }
> + return false;
> + }
> +
> + @Override
> public Resource addPath(final String subpath) throws IOException
> {
> String cpath = URIUtil.canonicalPath(subpath);
> diff -Nru jetty9-9.4.38/jetty-util/src/main/java/org/eclipse/jetty/util/resource/Resource.java jetty9-9.4.39/jetty-util/src/main/java/org/eclipse/jetty/util/resource/Resource.java
> --- jetty9-9.4.38/jetty-util/src/main/java/org/eclipse/jetty/util/resource/Resource.java 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-util/src/main/java/org/eclipse/jetty/util/resource/Resource.java 2021-03-25 15:36:22.000000000 +0100
> @@ -312,6 +312,18 @@
> public abstract boolean isContainedIn(Resource r) throws MalformedURLException;
>
> /**
> + * Return true if the passed Resource represents the same resource as the Resource.
> + * For many resource types, this is equivalent to {@link #equals(Object)}, however
> + * for resources types that support aliasing, this maybe some other check (e.g. {@link java.nio.file.Files#isSameFile(Path, Path)}).
> + * @param resource The resource to check
> + * @return true if the passed resource represents the same resource.
> + */
> + public boolean isSame(Resource resource)
> + {
> + return equals(resource);
> + }
> +
> + /**
> * Release any temporary resources held by the resource.
> *
> * @deprecated use {@link #close()}
> diff -Nru jetty9-9.4.38/jetty-util/src/main/java/org/eclipse/jetty/util/ssl/SslContextFactory.java jetty9-9.4.39/jetty-util/src/main/java/org/eclipse/jetty/util/ssl/SslContextFactory.java
> --- jetty9-9.4.38/jetty-util/src/main/java/org/eclipse/jetty/util/ssl/SslContextFactory.java 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-util/src/main/java/org/eclipse/jetty/util/ssl/SslContextFactory.java 2021-03-25 15:36:22.000000000 +0100
> @@ -54,6 +54,7 @@
> import java.util.Set;
> import java.util.function.Consumer;
> import java.util.regex.Pattern;
> +import java.util.stream.Collectors;
> import javax.net.ssl.CertPathTrustManagerParameters;
> import javax.net.ssl.HostnameVerifier;
> import javax.net.ssl.KeyManager;
> @@ -63,7 +64,6 @@
> import javax.net.ssl.SNIServerName;
> import javax.net.ssl.SSLContext;
> import javax.net.ssl.SSLEngine;
> -import javax.net.ssl.SSLHandshakeException;
> import javax.net.ssl.SSLParameters;
> import javax.net.ssl.SSLPeerUnverifiedException;
> import javax.net.ssl.SSLServerSocket;
> @@ -2292,7 +2292,7 @@
> }
>
> @Override
> - public String sniSelect(String keyType, Principal[] issuers, SSLSession session, String sniHost, Collection<X509> certificates) throws SSLHandshakeException
> + public String sniSelect(String keyType, Principal[] issuers, SSLSession session, String sniHost, Collection<X509> certificates)
> {
> if (sniHost == null)
> {
> @@ -2301,12 +2301,24 @@
> }
> else
> {
> - // Match the SNI host, or let the JDK decide unless unmatched SNIs are rejected.
> - return certificates.stream()
> + // Match the SNI host.
> + List<X509> matching = certificates.stream()
> .filter(x509 -> x509.matches(sniHost))
> - .findFirst()
> + .collect(Collectors.toList());
> +
> + // No match, let the JDK decide unless unmatched SNIs are rejected.
> + if (matching.isEmpty())
> + return isSniRequired() ? null : SniX509ExtendedKeyManager.SniSelector.DELEGATE;
> +
> + String alias = matching.get(0).getAlias();
> + if (matching.size() == 1)
> + return alias;
> +
> + // Prefer strict matches over wildcard matches.
> + return matching.stream()
> + .min(Comparator.comparingInt(cert -> cert.getWilds().size()))
> .map(X509::getAlias)
> - .orElse(_sniRequired ? null : SniX509ExtendedKeyManager.SniSelector.DELEGATE);
> + .orElse(alias);
> }
> }
>
> diff -Nru jetty9-9.4.38/jetty-util/src/main/java/org/eclipse/jetty/util/TypeUtil.java jetty9-9.4.39/jetty-util/src/main/java/org/eclipse/jetty/util/TypeUtil.java
> --- jetty9-9.4.38/jetty-util/src/main/java/org/eclipse/jetty/util/TypeUtil.java 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-util/src/main/java/org/eclipse/jetty/util/TypeUtil.java 2021-03-25 15:36:22.000000000 +0100
> @@ -19,9 +19,6 @@
> package org.eclipse.jetty.util;
>
> import java.io.IOException;
> -import java.lang.invoke.MethodHandle;
> -import java.lang.invoke.MethodHandles;
> -import java.lang.invoke.MethodType;
> import java.lang.reflect.Constructor;
> import java.lang.reflect.InvocationTargetException;
> import java.lang.reflect.Method;
> @@ -38,12 +35,11 @@
> import java.util.HashMap;
> import java.util.List;
> import java.util.Map;
> +import java.util.function.Function;
>
> import org.eclipse.jetty.util.log.Log;
> import org.eclipse.jetty.util.log.Logger;
>
> -import static java.lang.invoke.MethodType.methodType;
> -
> /**
> * TYPE Utilities.
> * Provides various static utility methods for manipulating types and their
> @@ -177,38 +173,32 @@
> }
> }
>
> - private static final MethodHandle[] LOCATION_METHODS;
> - private static final ModuleLocation MODULE_LOCATION;
> + private static final List<Function<Class<?>, URI>> LOCATION_METHODS = new ArrayList<>();
> + private static final Function<Class<?>, URI> MODULE_LOCATION;
>
> static
> {
> - List<MethodHandle> locationMethods = new ArrayList<>();
> -
> - MethodHandles.Lookup lookup = MethodHandles.lookup();
> - MethodType type = methodType(URI.class, Class.class);
> -
> + // Lookup order in LOCATION_METHODS is important.
> + LOCATION_METHODS.add(TypeUtil::getCodeSourceLocation);
> + Function<Class<?>, URI> moduleFunc = null;
> try
> {
> - locationMethods.add(lookup.findStatic(TypeUtil.class, "getCodeSourceLocation", type));
> - ModuleLocation moduleLocation = null;
> - try
> + Class<?> clazzModuleLocation = TypeUtil.class.getClassLoader().loadClass(TypeUtil.class.getPackage().getName() + ".ModuleLocation");
> + Object obj = clazzModuleLocation.getConstructor().newInstance();
> + if (obj instanceof Function)
> {
> - moduleLocation = new ModuleLocation();
> - locationMethods.add(lookup.findStatic(TypeUtil.class, "getModuleLocation", type));
> + //noinspection unchecked
> + moduleFunc = (Function<Class<?>, URI>)obj;
> + LOCATION_METHODS.add(moduleFunc);
> }
> - catch (UnsupportedOperationException e)
> - {
> - LOG.debug("JVM Runtime does not support Modules");
> - }
> - MODULE_LOCATION = moduleLocation;
> - locationMethods.add(lookup.findStatic(TypeUtil.class, "getClassLoaderLocation", type));
> - locationMethods.add(lookup.findStatic(TypeUtil.class, "getSystemClassLoaderLocation", type));
> - LOCATION_METHODS = locationMethods.toArray(new MethodHandle[0]);
> }
> - catch (Exception e)
> + catch (Throwable t)
> {
> - throw new RuntimeException("Unable to establish Location Lookup Handles", e);
> + LOG.debug("This JVM Runtime does not support Modules, disabling Jetty internal support");
> }
> + MODULE_LOCATION = moduleFunc;
> + LOCATION_METHODS.add(TypeUtil::getClassLoaderLocation);
> + LOCATION_METHODS.add(TypeUtil::getSystemClassLoaderLocation);
> }
>
> /**
> @@ -627,13 +617,11 @@
> */
> public static URI getLocationOfClass(Class<?> clazz)
> {
> - URI location;
> -
> - for (MethodHandle locationMethod : LOCATION_METHODS)
> + for (Function<Class<?>, URI> locationFunction : LOCATION_METHODS)
> {
> try
> {
> - location = (URI)locationMethod.invoke(clazz);
> + URI location = locationFunction.apply(clazz);
> if (location != null)
> {
> return location;
> @@ -723,7 +711,7 @@
> // In Jetty 10, this method can be implemented directly, without reflection
> if (MODULE_LOCATION != null)
> {
> - return MODULE_LOCATION.getModuleLocation(clazz);
> + return MODULE_LOCATION.apply(clazz);
> }
> return null;
> }
> diff -Nru jetty9-9.4.38/jetty-util/src/test/java/org/eclipse/jetty/util/resource/PathResourceTest.java jetty9-9.4.39/jetty-util/src/test/java/org/eclipse/jetty/util/resource/PathResourceTest.java
> --- jetty9-9.4.38/jetty-util/src/test/java/org/eclipse/jetty/util/resource/PathResourceTest.java 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-util/src/test/java/org/eclipse/jetty/util/resource/PathResourceTest.java 2021-03-25 15:36:22.000000000 +0100
> @@ -32,6 +32,7 @@
> import java.util.Map;
>
> import org.eclipse.jetty.toolchain.test.MavenTestingUtils;
> +import org.hamcrest.Matchers;
> import org.junit.jupiter.api.Test;
>
> import static java.nio.charset.StandardCharsets.UTF_8;
> @@ -146,4 +147,20 @@
> File file = resource.getFile();
> assertThat("File for default FileSystem", file, is(exampleJar.toFile()));
> }
> +
> + @Test
> + public void testSame() throws Exception
> + {
> + Path rpath = MavenTestingUtils.getTestResourcePathFile("resource.txt");
> + Path epath = MavenTestingUtils.getTestResourcePathFile("example.jar");
> + PathResource rPathResource = new PathResource(rpath);
> + FileResource rFileResource = new FileResource(rpath.toFile());
> + PathResource ePathResource = new PathResource(epath);
> + FileResource eFileResource = new FileResource(epath.toFile());
> +
> + assertThat(rPathResource.isSame(rPathResource), Matchers.is(true));
> + assertThat(rPathResource.isSame(rFileResource), Matchers.is(true));
> + assertThat(rPathResource.isSame(ePathResource), Matchers.is(false));
> + assertThat(rPathResource.isSame(eFileResource), Matchers.is(false));
> + }
> }
> diff -Nru jetty9-9.4.38/jetty-util-ajax/pom.xml jetty9-9.4.39/jetty-util-ajax/pom.xml
> --- jetty9-9.4.38/jetty-util-ajax/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-util-ajax/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-util-ajax</artifactId>
> diff -Nru jetty9-9.4.38/jetty-webapp/pom.xml jetty9-9.4.39/jetty-webapp/pom.xml
> --- jetty9-9.4.38/jetty-webapp/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-webapp/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-webapp</artifactId>
> diff -Nru jetty9-9.4.38/jetty-webapp/src/test/java/org/eclipse/jetty/webapp/WebAppContextTest.java jetty9-9.4.39/jetty-webapp/src/test/java/org/eclipse/jetty/webapp/WebAppContextTest.java
> --- jetty9-9.4.38/jetty-webapp/src/test/java/org/eclipse/jetty/webapp/WebAppContextTest.java 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-webapp/src/test/java/org/eclipse/jetty/webapp/WebAppContextTest.java 2021-03-25 15:36:22.000000000 +0100
> @@ -33,8 +33,10 @@
> import javax.servlet.ServletRequest;
> import javax.servlet.ServletResponse;
>
> +import org.eclipse.jetty.http.HttpCompliance;
> import org.eclipse.jetty.http.HttpStatus;
> import org.eclipse.jetty.http.HttpTester;
> +import org.eclipse.jetty.server.HttpConnectionFactory;
> import org.eclipse.jetty.server.LocalConnector;
> import org.eclipse.jetty.server.Server;
> import org.eclipse.jetty.server.ServerConnector;
> @@ -248,6 +250,42 @@
> }
>
> @Test
> + public void testProtectedTarget() throws Exception
> + {
> + Server server = newServer();
> + server.getConnectors()[0].getConnectionFactory(HttpConnectionFactory.class).setHttpCompliance(HttpCompliance.LEGACY);
> +
> + HandlerList handlers = new HandlerList();
> + ContextHandlerCollection contexts = new ContextHandlerCollection();
> + WebAppContext context = new WebAppContext();
> + Path testWebapp = MavenTestingUtils.getProjectDirPath("src/test/webapp");
> + context.setBaseResource(new PathResource(testWebapp));
> + context.setContextPath("/");
> + server.setHandler(handlers);
> + handlers.addHandler(contexts);
> + contexts.addHandler(context);
> +
> + LocalConnector connector = new LocalConnector(server);
> + server.addConnector(connector);
> +
> + server.start();
> + assertThat(HttpTester.parseResponse(connector.getResponse("GET /test.xml HTTP/1.1\r\nHost: localhost:8080\r\nConnection: close\r\n\r\n")).getStatus(), is(HttpStatus.OK_200));
> + assertThat(HttpTester.parseResponse(connector.getResponse("GET /%2e/%2e/test.xml HTTP/1.1\r\nHost: localhost:8080\r\nConnection: close\r\n\r\n")).getStatus(), is(HttpStatus.OK_200));
> + assertThat(HttpTester.parseResponse(connector.getResponse("GET /foo/%2e%2e/test.xml HTTP/1.1\r\nHost: localhost:8080\r\nConnection: close\r\n\r\n")).getStatus(), is(HttpStatus.OK_200));
> +
> + assertThat(HttpTester.parseResponse(connector.getResponse("GET /WEB-INF HTTP/1.1\r\nHost: localhost:8080\r\nConnection: close\r\n\r\n")).getStatus(), is(HttpStatus.NOT_FOUND_404));
> + assertThat(HttpTester.parseResponse(connector.getResponse("GET /WEB-INF/ HTTP/1.1\r\nHost: localhost:8080\r\nConnection: close\r\n\r\n")).getStatus(), is(HttpStatus.NOT_FOUND_404));
> + assertThat(HttpTester.parseResponse(connector.getResponse("GET /WEB-INF/test.xml HTTP/1.1\r\nHost: localhost:8080\r\nConnection: close\r\n\r\n")).getStatus(), is(HttpStatus.NOT_FOUND_404));
> + assertThat(HttpTester.parseResponse(connector.getResponse("GET /web-inf/test.xml HTTP/1.1\r\nHost: localhost:8080\r\nConnection: close\r\n\r\n")).getStatus(), is(HttpStatus.NOT_FOUND_404));
> + assertThat(HttpTester.parseResponse(connector.getResponse("GET /%2e/WEB-INF/test.xml HTTP/1.1\r\nHost: localhost:8080\r\nConnection: close\r\n\r\n")).getStatus(), is(HttpStatus.NOT_FOUND_404));
> + assertThat(HttpTester.parseResponse(connector.getResponse("GET /%2e/%2e/WEB-INF/test.xml HTTP/1.1\r\nHost: localhost:8080\r\nConnection: close\r\n\r\n")).getStatus(), is(HttpStatus.NOT_FOUND_404));
> + assertThat(HttpTester.parseResponse(connector.getResponse("GET /foo/%2e%2e/WEB-INF/test.xml HTTP/1.1\r\nHost: localhost:8080\r\nConnection: close\r\n\r\n")).getStatus(), is(HttpStatus.NOT_FOUND_404));
> + assertThat(HttpTester.parseResponse(connector.getResponse("GET /%2E/WEB-INF/test.xml HTTP/1.1\r\nHost: localhost:8080\r\nConnection: close\r\n\r\n")).getStatus(), is(HttpStatus.NOT_FOUND_404));
> + assertThat(HttpTester.parseResponse(connector.getResponse("GET //WEB-INF/test.xml HTTP/1.1\r\nHost: localhost:8080\r\nConnection: close\r\n\r\n")).getStatus(), is(HttpStatus.NOT_FOUND_404));
> + assertThat(HttpTester.parseResponse(connector.getResponse("GET /WEB-INF%2ftest.xml HTTP/1.1\r\nHost: localhost:8080\r\nConnection: close\r\n\r\n")).getStatus(), is(HttpStatus.NOT_FOUND_404));
> + }
> +
> + @Test
> public void testNullPath() throws Exception
> {
> Server server = newServer();
> diff -Nru jetty9-9.4.38/jetty-webapp/src/test/webapp/test.xml jetty9-9.4.39/jetty-webapp/src/test/webapp/test.xml
> --- jetty9-9.4.38/jetty-webapp/src/test/webapp/test.xml 1970-01-01 01:00:00.000000000 +0100
> +++ jetty9-9.4.39/jetty-webapp/src/test/webapp/test.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -0,0 +1 @@
> +test
> diff -Nru jetty9-9.4.38/jetty-webapp/src/test/webapp/WEB-INF/test.xml jetty9-9.4.39/jetty-webapp/src/test/webapp/WEB-INF/test.xml
> --- jetty9-9.4.38/jetty-webapp/src/test/webapp/WEB-INF/test.xml 1970-01-01 01:00:00.000000000 +0100
> +++ jetty9-9.4.39/jetty-webapp/src/test/webapp/WEB-INF/test.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -0,0 +1 @@
> +test
> diff -Nru jetty9-9.4.38/jetty-websocket/javax-websocket-client-impl/pom.xml jetty9-9.4.39/jetty-websocket/javax-websocket-client-impl/pom.xml
> --- jetty9-9.4.38/jetty-websocket/javax-websocket-client-impl/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-websocket/javax-websocket-client-impl/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.websocket</groupId>
> <artifactId>websocket-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-websocket/javax-websocket-server-impl/pom.xml jetty9-9.4.39/jetty-websocket/javax-websocket-server-impl/pom.xml
> --- jetty9-9.4.38/jetty-websocket/javax-websocket-server-impl/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-websocket/javax-websocket-server-impl/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.websocket</groupId>
> <artifactId>websocket-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-websocket/jetty-websocket-tests/pom.xml jetty9-9.4.39/jetty-websocket/jetty-websocket-tests/pom.xml
> --- jetty9-9.4.38/jetty-websocket/jetty-websocket-tests/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-websocket/jetty-websocket-tests/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.websocket</groupId>
> <artifactId>websocket-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-websocket/jetty-websocket-tests/src/test/java/org/eclipse/jetty/websocket/tests/PermessageDeflateBufferTest.java jetty9-9.4.39/jetty-websocket/jetty-websocket-tests/src/test/java/org/eclipse/jetty/websocket/tests/PermessageDeflateBufferTest.java
> --- jetty9-9.4.38/jetty-websocket/jetty-websocket-tests/src/test/java/org/eclipse/jetty/websocket/tests/PermessageDeflateBufferTest.java 1970-01-01 01:00:00.000000000 +0100
> +++ jetty9-9.4.39/jetty-websocket/jetty-websocket-tests/src/test/java/org/eclipse/jetty/websocket/tests/PermessageDeflateBufferTest.java 2021-03-25 15:36:22.000000000 +0100
> @@ -0,0 +1,135 @@
> +//
> +// ========================================================================
> +// Copyright (c) 1995-2021 Mort Bay Consulting Pty Ltd and others.
> +// ------------------------------------------------------------------------
> +// All rights reserved. This program and the accompanying materials
> +// are made available under the terms of the Eclipse Public License v1.0
> +// and Apache License v2.0 which accompanies this distribution.
> +//
> +// The Eclipse Public License is available at
> +// http://www.eclipse.org/legal/epl-v10.html
> +//
> +// The Apache License v2.0 is available at
> +// http://www.opensource.org/licenses/apache2.0.php
> +//
> +// You may elect to redistribute this code under either of these licenses.
> +// ========================================================================
> +//
> +
> +package org.eclipse.jetty.websocket.tests;
> +
> +import java.net.URI;
> +import java.util.Arrays;
> +import java.util.List;
> +import java.util.Random;
> +import java.util.concurrent.TimeUnit;
> +
> +import org.eclipse.jetty.server.Server;
> +import org.eclipse.jetty.server.ServerConnector;
> +import org.eclipse.jetty.servlet.ServletContextHandler;
> +import org.eclipse.jetty.websocket.api.Session;
> +import org.eclipse.jetty.websocket.api.annotations.WebSocket;
> +import org.eclipse.jetty.websocket.client.ClientUpgradeRequest;
> +import org.eclipse.jetty.websocket.client.WebSocketClient;
> +import org.eclipse.jetty.websocket.server.NativeWebSocketServletContainerInitializer;
> +import org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter;
> +import org.junit.jupiter.api.AfterEach;
> +import org.junit.jupiter.api.BeforeEach;
> +import org.junit.jupiter.api.Test;
> +
> +import static org.hamcrest.MatcherAssert.assertThat;
> +import static org.hamcrest.Matchers.is;
> +import static org.junit.jupiter.api.Assertions.assertTrue;
> +
> +public class PermessageDeflateBufferTest
> +{
> + private Server server;
> + private ServerConnector connector;
> + private WebSocketClient client;
> +
> + // @checkstyle-disable-check : AvoidEscapedUnicodeCharactersCheck
> + private static final List<String> DICT = Arrays.asList(
> + "\uD83C\uDF09",
> + "\uD83C\uDF0A",
> + "\uD83C\uDF0B",
> + "\uD83C\uDF0C",
> + "\uD83C\uDF0D",
> + "\uD83C\uDF0F",
> + "\uD83C\uDFC0",
> + "\uD83C\uDFC1",
> + "\uD83C\uDFC2",
> + "\uD83C\uDFC3",
> + "\uD83C\uDFC4",
> + "\uD83C\uDFC5"
> + );
> +
> + private static String randomText()
> + {
> + Random rnd = new Random();
> + StringBuilder sb = new StringBuilder();
> + for (int i = 0; i < 15000; i++)
> + {
> + sb.append(DICT.get(rnd.nextInt(DICT.size())));
> + }
> + return sb.toString();
> + }
> +
> + @BeforeEach
> + public void before() throws Exception
> + {
> + server = new Server();
> + connector = new ServerConnector(server);
> + server.addConnector(connector);
> +
> + ServletContextHandler contextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
> + contextHandler.setContextPath("/");
> + server.setHandler(contextHandler);
> + WebSocketUpgradeFilter.configure(contextHandler);
> + NativeWebSocketServletContainerInitializer.configure(contextHandler, (context, container) ->
> + {
> + container.getPolicy().setMaxTextMessageBufferSize(65535);
> + container.getPolicy().setInputBufferSize(16384);
> + container.addMapping("/", ServerSocket.class);
> + });
> +
> + server.start();
> + client = new WebSocketClient();
> + client.start();
> + }
> +
> + @AfterEach
> + public void after() throws Exception
> + {
> + client.stop();
> + server.stop();
> + }
> +
> + @WebSocket
> + public static class ServerSocket extends EchoSocket
> + {
> + @Override
> + public void onError(Throwable cause)
> + {
> + cause.printStackTrace();
> + super.onError(cause);
> + }
> + }
> +
> + @Test
> + public void testPermessageDeflateAggregation() throws Exception
> + {
> + EventSocket socket = new EventSocket();
> + ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest();
> + clientUpgradeRequest.addExtensions("permessage-deflate");
> +
> + URI uri = URI.create("ws://localhost:" + connector.getLocalPort());
> + Session session = client.connect(socket, uri, clientUpgradeRequest).get(5, TimeUnit.SECONDS);
> +
> + String s = randomText();
> + session.getRemote().sendString(s);
> + assertThat(socket.textMessages.poll(5, TimeUnit.SECONDS), is(s));
> +
> + session.close();
> + assertTrue(socket.closeLatch.await(5, TimeUnit.SECONDS));
> + }
> +}
> diff -Nru jetty9-9.4.38/jetty-websocket/pom.xml jetty9-9.4.39/jetty-websocket/pom.xml
> --- jetty9-9.4.38/jetty-websocket/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-websocket/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <artifactId>jetty-project</artifactId>
> <groupId>org.eclipse.jetty</groupId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-websocket/websocket-api/pom.xml jetty9-9.4.39/jetty-websocket/websocket-api/pom.xml
> --- jetty9-9.4.38/jetty-websocket/websocket-api/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-websocket/websocket-api/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.websocket</groupId>
> <artifactId>websocket-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-websocket/websocket-client/pom.xml jetty9-9.4.39/jetty-websocket/websocket-client/pom.xml
> --- jetty9-9.4.38/jetty-websocket/websocket-client/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-websocket/websocket-client/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.websocket</groupId>
> <artifactId>websocket-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-websocket/websocket-common/pom.xml jetty9-9.4.39/jetty-websocket/websocket-common/pom.xml
> --- jetty9-9.4.38/jetty-websocket/websocket-common/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-websocket/websocket-common/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.websocket</groupId>
> <artifactId>websocket-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/extensions/compress/CompressExtension.java jetty9-9.4.39/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/extensions/compress/CompressExtension.java
> --- jetty9-9.4.38/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/extensions/compress/CompressExtension.java 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/extensions/compress/CompressExtension.java 2021-03-25 15:36:22.000000000 +0100
> @@ -197,14 +197,15 @@
>
> while (true)
> {
> + // The buffer returned by the accumulator might not be empty, so we must append starting from the limit.
> ByteBuffer buffer = accumulator.ensureBuffer(DECOMPRESS_BUF_SIZE);
> - int read = inflater.inflate(buffer.array(), buffer.arrayOffset() + buffer.position(), buffer.capacity() - buffer.limit());
> - buffer.limit(buffer.limit() + read);
> - accumulator.addLength(read);
> + int decompressed = inflater.inflate(buffer.array(), buffer.arrayOffset() + buffer.limit(), buffer.capacity() - buffer.limit());
> + buffer.limit(buffer.limit() + decompressed);
> + accumulator.addLength(decompressed);
> if (LOG.isDebugEnabled())
> - LOG.debug("Decompressed {} bytes into buffer {} from {}", read, BufferUtil.toDetailString(buffer), toDetail(inflater));
> + LOG.debug("Decompressed {} bytes into buffer {} from {}", decompressed, BufferUtil.toDetailString(buffer), toDetail(inflater));
>
> - if (read <= 0)
> + if (decompressed <= 0)
> break;
> }
> }
> @@ -495,8 +496,9 @@
> {
> while (true)
> {
> + // The buffer returned by the accumulator might not be empty, so we must append starting from the limit.
> ByteBuffer buffer = accumulator.ensureBuffer(8, outputLength);
> - int compressed = deflater.deflate(buffer.array(), buffer.arrayOffset() + buffer.position(), buffer.capacity() - buffer.limit(), Deflater.SYNC_FLUSH);
> + int compressed = deflater.deflate(buffer.array(), buffer.arrayOffset() + buffer.limit(), buffer.capacity() - buffer.limit(), Deflater.SYNC_FLUSH);
> buffer.limit(buffer.limit() + compressed);
>
> if (LOG.isDebugEnabled())
> diff -Nru jetty9-9.4.38/jetty-websocket/websocket-server/pom.xml jetty9-9.4.39/jetty-websocket/websocket-server/pom.xml
> --- jetty9-9.4.38/jetty-websocket/websocket-server/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-websocket/websocket-server/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.websocket</groupId>
> <artifactId>websocket-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-websocket/websocket-servlet/pom.xml jetty9-9.4.39/jetty-websocket/websocket-servlet/pom.xml
> --- jetty9-9.4.38/jetty-websocket/websocket-servlet/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-websocket/websocket-servlet/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.websocket</groupId>
> <artifactId>websocket-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/jetty-xml/pom.xml jetty9-9.4.39/jetty-xml/pom.xml
> --- jetty9-9.4.38/jetty-xml/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-xml/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jetty-xml</artifactId>
> diff -Nru jetty9-9.4.38/jetty-xml/src/test/java/org/eclipse/jetty/xml/XmlParserTest.java jetty9-9.4.39/jetty-xml/src/test/java/org/eclipse/jetty/xml/XmlParserTest.java
> --- jetty9-9.4.38/jetty-xml/src/test/java/org/eclipse/jetty/xml/XmlParserTest.java 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/jetty-xml/src/test/java/org/eclipse/jetty/xml/XmlParserTest.java 2021-03-25 15:36:22.000000000 +0100
> @@ -33,6 +33,8 @@
>
> URL configURL = XmlConfiguration.class.getClassLoader().getResource("org/eclipse/jetty/xml/configure_9_3.dtd");
> parser.redirectEntity("configure.dtd", configURL);
> + parser.redirectEntity("configure_9_3.dtd", configURL);
> + //parser.redirectEntity("http://www.eclipse.org/jetty/configure_9_3.dtd", configURL);
> parser.redirectEntity("http://jetty.eclipse.org/configure.dtd", configURL);
> parser.redirectEntity("-//Mort Bay Consulting//DTD Configure//EN", configURL);
>
> diff -Nru jetty9-9.4.38/pom.xml jetty9-9.4.39/pom.xml
> --- jetty9-9.4.38/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -4,7 +4,7 @@
> <modelVersion>4.0.0</modelVersion>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> <name>Jetty :: Project</name>
> <description>The Eclipse Jetty Project</description>
> <packaging>pom</packaging>
> @@ -19,7 +19,7 @@
> <build-support.version>1.5</build-support.version>
> <checkstyle.version>8.37</checkstyle.version>
> <slf4j.version>1.7.30</slf4j.version>
> - <log4j2.version>2.11.2</log4j2.version>
> + <log4j2.version>2.14.0</log4j2.version>
> <disruptor.version>3.4.2</disruptor.version>
> <logback.version>1.2.3</logback.version>
> <jetty-test-policy.version>1.2</jetty-test-policy.version>
> diff -Nru jetty9-9.4.38/tests/pom.xml jetty9-9.4.39/tests/pom.xml
> --- jetty9-9.4.38/tests/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -4,7 +4,7 @@
> <parent>
> <groupId>org.eclipse.jetty</groupId>
> <artifactId>jetty-project</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> <relativePath>../pom.xml</relativePath>
> </parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> diff -Nru jetty9-9.4.38/tests/test-continuation/pom.xml jetty9-9.4.39/tests/test-continuation/pom.xml
> --- jetty9-9.4.38/tests/test-continuation/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-continuation/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>tests-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> <relativePath>../pom.xml</relativePath>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/tests/test-distribution/pom.xml jetty9-9.4.39/tests/test-distribution/pom.xml
> --- jetty9-9.4.38/tests/test-distribution/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-distribution/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -2,7 +2,7 @@
> <parent>
> <artifactId>tests-parent</artifactId>
> <groupId>org.eclipse.jetty.tests</groupId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
>
> diff -Nru jetty9-9.4.38/tests/test-http-client-transport/pom.xml jetty9-9.4.39/tests/test-http-client-transport/pom.xml
> --- jetty9-9.4.38/tests/test-http-client-transport/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-http-client-transport/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>tests-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/tests/test-integration/pom.xml jetty9-9.4.39/tests/test-integration/pom.xml
> --- jetty9-9.4.38/tests/test-integration/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-integration/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>tests-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>test-integration</artifactId>
> diff -Nru jetty9-9.4.38/tests/test-jmx/jmx-webapp/pom.xml jetty9-9.4.39/tests/test-jmx/jmx-webapp/pom.xml
> --- jetty9-9.4.38/tests/test-jmx/jmx-webapp/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-jmx/jmx-webapp/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -4,7 +4,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-jmx-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <artifactId>jmx-webapp</artifactId>
> <packaging>war</packaging>
> diff -Nru jetty9-9.4.38/tests/test-jmx/jmx-webapp-it/pom.xml jetty9-9.4.39/tests/test-jmx/jmx-webapp-it/pom.xml
> --- jetty9-9.4.38/tests/test-jmx/jmx-webapp-it/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-jmx/jmx-webapp-it/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-jmx-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>jmx-webapp-it</artifactId>
> diff -Nru jetty9-9.4.38/tests/test-jmx/pom.xml jetty9-9.4.39/tests/test-jmx/pom.xml
> --- jetty9-9.4.38/tests/test-jmx/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-jmx/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>tests-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> <artifactId>test-jmx-parent</artifactId>
> diff -Nru jetty9-9.4.38/tests/test-loginservice/pom.xml jetty9-9.4.39/tests/test-loginservice/pom.xml
> --- jetty9-9.4.38/tests/test-loginservice/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-loginservice/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -4,7 +4,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>tests-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <artifactId>test-loginservice</artifactId>
> <name>Jetty Tests :: Login Service</name>
> diff -Nru jetty9-9.4.38/tests/test-quickstart/pom.xml jetty9-9.4.39/tests/test-quickstart/pom.xml
> --- jetty9-9.4.38/tests/test-quickstart/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-quickstart/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>tests-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> <relativePath>../pom.xml</relativePath>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/tests/test-sessions/pom.xml jetty9-9.4.39/tests/test-sessions/pom.xml
> --- jetty9-9.4.38/tests/test-sessions/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-sessions/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -4,7 +4,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>tests-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <artifactId>test-sessions-parent</artifactId>
> <name>Jetty Tests :: Sessions :: Parent</name>
> diff -Nru jetty9-9.4.38/tests/test-sessions/test-file-sessions/pom.xml jetty9-9.4.39/tests/test-sessions/test-file-sessions/pom.xml
> --- jetty9-9.4.38/tests/test-sessions/test-file-sessions/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-sessions/test-file-sessions/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -4,7 +4,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-sessions-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <artifactId>test-file-sessions</artifactId>
> <name>Jetty Tests :: Sessions :: File</name>
> diff -Nru jetty9-9.4.38/tests/test-sessions/test-gcloud-sessions/pom.xml jetty9-9.4.39/tests/test-sessions/test-gcloud-sessions/pom.xml
> --- jetty9-9.4.38/tests/test-sessions/test-gcloud-sessions/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-sessions/test-gcloud-sessions/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -4,7 +4,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-sessions-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <artifactId>test-gcloud-sessions</artifactId>
> <name>Jetty Tests :: Sessions :: GCloud</name>
> diff -Nru jetty9-9.4.38/tests/test-sessions/test-hazelcast-sessions/pom.xml jetty9-9.4.39/tests/test-sessions/test-hazelcast-sessions/pom.xml
> --- jetty9-9.4.38/tests/test-sessions/test-hazelcast-sessions/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-sessions/test-hazelcast-sessions/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -4,7 +4,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-sessions-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <artifactId>test-hazelcast-sessions</artifactId>
> <name>Jetty Tests :: Sessions :: Hazelcast</name>
> diff -Nru jetty9-9.4.38/tests/test-sessions/test-infinispan-sessions/pom.xml jetty9-9.4.39/tests/test-sessions/test-infinispan-sessions/pom.xml
> --- jetty9-9.4.38/tests/test-sessions/test-infinispan-sessions/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-sessions/test-infinispan-sessions/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -4,7 +4,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-sessions-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <artifactId>test-infinispan-sessions</artifactId>
> <name>Jetty Tests :: Sessions :: Infinispan</name>
> diff -Nru jetty9-9.4.38/tests/test-sessions/test-jdbc-sessions/pom.xml jetty9-9.4.39/tests/test-sessions/test-jdbc-sessions/pom.xml
> --- jetty9-9.4.38/tests/test-sessions/test-jdbc-sessions/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-sessions/test-jdbc-sessions/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -4,7 +4,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-sessions-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <artifactId>test-jdbc-sessions</artifactId>
> <name>Jetty Tests :: Sessions :: JDBC</name>
> diff -Nru jetty9-9.4.38/tests/test-sessions/test-memcached-sessions/pom.xml jetty9-9.4.39/tests/test-sessions/test-memcached-sessions/pom.xml
> --- jetty9-9.4.38/tests/test-sessions/test-memcached-sessions/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-sessions/test-memcached-sessions/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -4,7 +4,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-sessions-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <artifactId>test-memcached-sessions</artifactId>
> <name>Jetty Tests :: Sessions :: Memcached</name>
> diff -Nru jetty9-9.4.38/tests/test-sessions/test-mongodb-sessions/pom.xml jetty9-9.4.39/tests/test-sessions/test-mongodb-sessions/pom.xml
> --- jetty9-9.4.38/tests/test-sessions/test-mongodb-sessions/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-sessions/test-mongodb-sessions/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -4,7 +4,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-sessions-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <artifactId>test-mongodb-sessions</artifactId>
> <name>Jetty Tests :: Sessions :: Mongo</name>
> diff -Nru jetty9-9.4.38/tests/test-sessions/test-sessions-common/pom.xml jetty9-9.4.39/tests/test-sessions/test-sessions-common/pom.xml
> --- jetty9-9.4.38/tests/test-sessions/test-sessions-common/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-sessions/test-sessions-common/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -4,7 +4,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-sessions-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <artifactId>test-sessions-common</artifactId>
> <name>Jetty Tests :: Sessions :: Common</name>
> diff -Nru jetty9-9.4.38/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/DuplicateCookieTest.java jetty9-9.4.39/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/DuplicateCookieTest.java
> --- jetty9-9.4.38/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/DuplicateCookieTest.java 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/DuplicateCookieTest.java 2021-03-25 15:36:22.000000000 +0100
> @@ -65,13 +65,15 @@
> try (StacklessLogging stackless = new StacklessLogging(Log.getLogger("org.eclipse.jetty.server.session")))
> {
> //create a valid session
> - createUnExpiredSession(contextHandler.getSessionHandler().getSessionCache(),
> + Session s4422 = createUnExpiredSession(contextHandler.getSessionHandler().getSessionCache(),
> contextHandler.getSessionHandler().getSessionCache().getSessionDataStore(),
> "4422");
>
> client = new HttpClient();
> client.start();
>
> + assertEquals(0, s4422.getRequests());
> +
> //make a request with another session cookie in there that does not exist
> Request request = client.newRequest("http://localhost:" + port1 + contextPath + servletMapping + "?action=check");
> request.header("Cookie", "JSESSIONID=123"); //doesn't exist
> @@ -79,6 +81,66 @@
> ContentResponse response = request.send();
> assertEquals(HttpServletResponse.SC_OK, response.getStatus());
> assertEquals("4422", response.getContentAsString());
> +
> + assertEquals(0, s4422.getRequests());
> + }
> + finally
> + {
> + server1.stop();
> + client.stop();
> + }
> + }
> +
> + @Test
> + public void testMultipleSessionCookiesValidFirst() throws Exception
> + {
> + String contextPath = "";
> + String servletMapping = "/server";
> + HttpClient client = null;
> +
> + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory();
> + SessionDataStoreFactory storeFactory = new TestSessionDataStoreFactory();
> +
> + TestServer server1 = new TestServer(0, -1, -1, cacheFactory, storeFactory);
> + TestServlet servlet = new TestServlet();
> + ServletHolder holder = new ServletHolder(servlet);
> + ServletContextHandler contextHandler = server1.addContext(contextPath);
> + contextHandler.addServlet(holder, servletMapping);
> + server1.start();
> + int port1 = server1.getPort();
> +
> + try (StacklessLogging stackless = new StacklessLogging(Log.getLogger("org.eclipse.jetty.server.session")))
> + {
> + //create a valid session
> + Session s1122 = createUnExpiredSession(contextHandler.getSessionHandler().getSessionCache(),
> + contextHandler.getSessionHandler().getSessionCache().getSessionDataStore(),
> + "1122");
> + //create an invalid session
> + Session s2233 = createInvalidSession(contextHandler.getSessionHandler().getSessionCache(),
> + contextHandler.getSessionHandler().getSessionCache().getSessionDataStore(),
> + "2233");
> + //create another invalid session
> + Session s2255 = createInvalidSession(contextHandler.getSessionHandler().getSessionCache(),
> + contextHandler.getSessionHandler().getSessionCache().getSessionDataStore(),
> + "2255");
> +
> + client = new HttpClient();
> + client.start();
> +
> + assertEquals(0, s1122.getRequests());
> + assertEquals(0, s2233.getRequests());
> + assertEquals(0, s2255.getRequests());
> +
> + //make a request where the valid session cookie is first
> + Request request = client.newRequest("http://localhost:" + port1 + contextPath + servletMapping + "?action=check");
> + request.header("Cookie", "JSESSIONID=1122"); //is valid
> + request.header("Cookie", "JSESSIONID=2233"); //is invalid
> + request.header("Cookie", "JSESSIONID=2255"); //is invalid
> + ContentResponse response = request.send();
> + assertEquals(HttpServletResponse.SC_OK, response.getStatus());
> + assertEquals("1122", response.getContentAsString());
> +
> + assertEquals(0, s1122.getRequests());
> }
> finally
> {
> @@ -88,7 +150,7 @@
> }
>
> @Test
> - public void testMultipleSessionCookiesOnlyOneValid() throws Exception
> + public void testMultipleSessionCookiesInvalidFirst() throws Exception
> {
> String contextPath = "";
> String servletMapping = "/server";
> @@ -108,24 +170,93 @@
> try (StacklessLogging stackless = new StacklessLogging(Log.getLogger("org.eclipse.jetty.server.session")))
> {
> //create a valid session
> - createUnExpiredSession(contextHandler.getSessionHandler().getSessionCache(),
> + Session s1122 = createUnExpiredSession(contextHandler.getSessionHandler().getSessionCache(),
> contextHandler.getSessionHandler().getSessionCache().getSessionDataStore(),
> "1122");
> //create an invalid session
> - createInvalidSession(contextHandler.getSessionHandler().getSessionCache(),
> + Session s2233 = createInvalidSession(contextHandler.getSessionHandler().getSessionCache(),
> contextHandler.getSessionHandler().getSessionCache().getSessionDataStore(),
> "2233");
> + //create another invalid session
> + Session s2255 = createInvalidSession(contextHandler.getSessionHandler().getSessionCache(),
> + contextHandler.getSessionHandler().getSessionCache().getSessionDataStore(),
> + "2255");
>
> client = new HttpClient();
> client.start();
>
> - //make a request with another session cookie in there that is not valid
> + assertEquals(0, s1122.getRequests());
> + assertEquals(0, s2233.getRequests());
> + assertEquals(0, s2255.getRequests());
> +
> + //make a request with the valid session cookie last
> Request request = client.newRequest("http://localhost:" + port1 + contextPath + servletMapping + "?action=check");
> + request.header("Cookie", "JSESSIONID=2233"); //is invalid
> + request.header("Cookie", "JSESSIONID=2255"); //is invalid
> request.header("Cookie", "JSESSIONID=1122"); //is valid
> + ContentResponse response = request.send();
> + assertEquals(HttpServletResponse.SC_OK, response.getStatus());
> + assertEquals("1122", response.getContentAsString());
> +
> + assertEquals(0, s1122.getRequests());
> + }
> + finally
> + {
> + server1.stop();
> + client.stop();
> + }
> + }
> +
> + @Test
> + public void testMultipleSessionCookiesInvalidValidInvalid() throws Exception
> + {
> + String contextPath = "";
> + String servletMapping = "/server";
> + HttpClient client = null;
> +
> + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory();
> + SessionDataStoreFactory storeFactory = new TestSessionDataStoreFactory();
> +
> + TestServer server1 = new TestServer(0, -1, -1, cacheFactory, storeFactory);
> + TestServlet servlet = new TestServlet();
> + ServletHolder holder = new ServletHolder(servlet);
> + ServletContextHandler contextHandler = server1.addContext(contextPath);
> + contextHandler.addServlet(holder, servletMapping);
> + server1.start();
> + int port1 = server1.getPort();
> +
> + try (StacklessLogging stackless = new StacklessLogging(Log.getLogger("org.eclipse.jetty.server.session")))
> + {
> + //create a valid session
> + Session s1122 = createUnExpiredSession(contextHandler.getSessionHandler().getSessionCache(),
> + contextHandler.getSessionHandler().getSessionCache().getSessionDataStore(),
> + "1122");
> + //create an invalid session
> + Session s2233 = createInvalidSession(contextHandler.getSessionHandler().getSessionCache(),
> + contextHandler.getSessionHandler().getSessionCache().getSessionDataStore(),
> + "2233");
> + //create another invalid session
> + Session s2255 = createInvalidSession(contextHandler.getSessionHandler().getSessionCache(),
> + contextHandler.getSessionHandler().getSessionCache().getSessionDataStore(),
> + "2255");
> +
> + client = new HttpClient();
> + client.start();
> +
> + assertEquals(0, s1122.getRequests());
> + assertEquals(0, s2233.getRequests());
> + assertEquals(0, s2255.getRequests());
> +
> + //make a request with another session cookie with the valid session surrounded by invalids
> + Request request = client.newRequest("http://localhost:" + port1 + contextPath + servletMapping + "?action=check");
> request.header("Cookie", "JSESSIONID=2233"); //is invalid
> + request.header("Cookie", "JSESSIONID=1122"); //is valid
> + request.header("Cookie", "JSESSIONID=2255"); //is invalid
> ContentResponse response = request.send();
> assertEquals(HttpServletResponse.SC_OK, response.getStatus());
> assertEquals("1122", response.getContentAsString());
> +
> + assertEquals(0, s1122.getRequests());
> }
> finally
> {
> @@ -155,25 +286,83 @@
> try (StacklessLogging stackless = new StacklessLogging(Log.getLogger("org.eclipse.jetty.server.session")))
> {
> //create some of unexpired sessions
> - createUnExpiredSession(contextHandler.getSessionHandler().getSessionCache(),
> + Session s1234 = createUnExpiredSession(contextHandler.getSessionHandler().getSessionCache(),
> contextHandler.getSessionHandler().getSessionCache().getSessionDataStore(),
> "1234");
> - createUnExpiredSession(contextHandler.getSessionHandler().getSessionCache(),
> + Session s5678 = createUnExpiredSession(contextHandler.getSessionHandler().getSessionCache(),
> contextHandler.getSessionHandler().getSessionCache().getSessionDataStore(),
> "5678");
> - createUnExpiredSession(contextHandler.getSessionHandler().getSessionCache(),
> + Session s9111 = createUnExpiredSession(contextHandler.getSessionHandler().getSessionCache(),
> contextHandler.getSessionHandler().getSessionCache().getSessionDataStore(),
> "9111");
>
> client = new HttpClient();
> client.start();
>
> + //check that the request count is 0
> + assertEquals(0, s1234.getRequests());
> + assertEquals(0, s5678.getRequests());
> + assertEquals(0, s9111.getRequests());
> +
> //make a request with multiple valid session ids
> Request request = client.newRequest("http://localhost:" + port1 + contextPath + servletMapping + "?action=check");
> request.header("Cookie", "JSESSIONID=1234");
> request.header("Cookie", "JSESSIONID=5678");
> ContentResponse response = request.send();
> assertEquals(HttpServletResponse.SC_BAD_REQUEST, response.getStatus());
> +
> + //check that all valid sessions have their request counts decremented correctly after the request, back to 0
> + assertEquals(0, s1234.getRequests());
> + assertEquals(0, s5678.getRequests());
> + assertEquals(0, s9111.getRequests());
> + }
> + finally
> + {
> + server1.stop();
> + client.stop();
> + }
> + }
> +
> + @Test
> + public void testMultipleIdenticalSessionCookies() throws Exception
> + {
> + String contextPath = "";
> + String servletMapping = "/server";
> + HttpClient client = null;
> +
> + DefaultSessionCacheFactory cacheFactory = new DefaultSessionCacheFactory();
> + SessionDataStoreFactory storeFactory = new TestSessionDataStoreFactory();
> +
> + TestServer server1 = new TestServer(0, -1, -1, cacheFactory, storeFactory);
> + TestServlet servlet = new TestServlet();
> + ServletHolder holder = new ServletHolder(servlet);
> + ServletContextHandler contextHandler = server1.addContext(contextPath);
> + contextHandler.addServlet(holder, servletMapping);
> + server1.start();
> + int port1 = server1.getPort();
> +
> + try (StacklessLogging stackless = new StacklessLogging(Log.getLogger("org.eclipse.jetty.server.session")))
> + {
> + //create a valid unexpired session
> + Session s1234 = createUnExpiredSession(contextHandler.getSessionHandler().getSessionCache(),
> + contextHandler.getSessionHandler().getSessionCache().getSessionDataStore(),
> + "1234");
> +
> + client = new HttpClient();
> + client.start();
> +
> + //check that the request count is 0
> + assertEquals(0, s1234.getRequests());
> +
> + //make a request with multiple valid session ids
> + Request request = client.newRequest("http://localhost:" + port1 + contextPath + servletMapping + "?action=check");
> + request.header("Cookie", "JSESSIONID=1234");
> + request.header("Cookie", "JSESSIONID=1234");
> + ContentResponse response = request.send();
> + assertEquals(HttpServletResponse.SC_OK, response.getStatus());
> +
> + //check that all valid sessions have their request counts decremented correctly after the request, back to 0
> + assertEquals(0, s1234.getRequests());
> }
> finally
> {
> @@ -189,6 +378,7 @@
> data.setExpiry(now + TimeUnit.DAYS.toMillis(1));
> Session s = cache.newSession(data);
> cache.add(id, s);
> + s.complete(); //pretend a request that created the session is finished
> return s;
> }
>
> diff -Nru jetty9-9.4.38/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/SessionInvalidationTest.java jetty9-9.4.39/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/SessionInvalidationTest.java
> --- jetty9-9.4.38/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/SessionInvalidationTest.java 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-sessions/test-sessions-common/src/test/java/org/eclipse/jetty/server/session/SessionInvalidationTest.java 2021-03-25 15:36:22.000000000 +0100
> @@ -30,8 +30,11 @@
> import org.eclipse.jetty.client.api.Request;
> import org.eclipse.jetty.servlet.ServletContextHandler;
> import org.eclipse.jetty.servlet.ServletHolder;
> +import org.eclipse.jetty.util.StringUtil;
> import org.junit.jupiter.api.Test;
>
> +import static org.hamcrest.MatcherAssert.assertThat;
> +import static org.hamcrest.Matchers.containsStringIgnoringCase;
> import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
> import static org.junit.jupiter.api.Assertions.assertEquals;
> import static org.junit.jupiter.api.Assertions.assertNotNull;
> @@ -96,6 +99,63 @@
> }
> }
>
> + @Test
> + public void testCreateInvalidateCheckWithNullCache() throws Exception
> + {
> + String contextPath = "";
> + String servletMapping = "/server";
> + int scavengePeriod = -1;
> +
> + NullSessionCacheFactory cacheFactory = new NullSessionCacheFactory();
> + SessionDataStoreFactory storeFactory = new TestSessionDataStoreFactory();
> + ((AbstractSessionDataStoreFactory)storeFactory).setGracePeriodSec(scavengePeriod);
> +
> + TestServer server = new TestServer(0, 0, scavengePeriod,
> + cacheFactory, storeFactory);
> + ServletContextHandler context = server.addContext(contextPath);
> + TestServlet servlet = new TestServlet();
> + ServletHolder holder = new ServletHolder(servlet);
> + context.addServlet(holder, servletMapping);
> +
> + try
> + {
> + server.start();
> + int port1 = server.getPort();
> +
> + HttpClient client = new HttpClient();
> + client.start();
> + try
> + {
> + String url = "http://localhost:" + port1 + contextPath + servletMapping;
> + // Create the session
> + ContentResponse response1 = client.GET(url + "?action=init");
> + assertEquals(HttpServletResponse.SC_OK, response1.getStatus());
> + String sessionCookie = response1.getHeaders().get("Set-Cookie");
> + assertTrue(sessionCookie != null);
> +
> + // Make a request which will invalidate the existing session
> + Request request2 = client.newRequest(url + "?action=test");
> + ContentResponse response2 = request2.send();
> + assertEquals(HttpServletResponse.SC_OK, response2.getStatus());
> +
> + //Make a request to get the session - should not exist
> + Request request3 = client.newRequest(url + "?action=get");
> + ContentResponse response3 = request3.send();
> + assertEquals(HttpServletResponse.SC_OK, response3.getStatus());
> + assertThat(response3.getContentAsString(), containsStringIgnoringCase("session=null"));
> +
> + }
> + finally
> + {
> + client.stop();
> + }
> + }
> + finally
> + {
> + server.stop();
> + }
> + }
> +
> public static class TestServlet extends HttpServlet
> {
> private static final long serialVersionUID = 1L;
> @@ -131,6 +191,12 @@
> assertThrows(IllegalStateException.class, () -> session.setAttribute("a", "b"));
> assertDoesNotThrow(() -> session.getId());
> }
> + else if ("get".equals(action))
> + {
> + HttpSession session = request.getSession(false);
> +
> + httpServletResponse.getWriter().println("SESSION=" + (session == null ? "null" : session.getId()));
> + }
> }
> }
> }
> diff -Nru jetty9-9.4.38/tests/test-webapps/pom.xml jetty9-9.4.39/tests/test-webapps/pom.xml
> --- jetty9-9.4.38/tests/test-webapps/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-webapps/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -4,7 +4,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>tests-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> <relativePath>../pom.xml</relativePath>
> </parent>
> <artifactId>test-webapps-parent</artifactId>
> diff -Nru jetty9-9.4.38/tests/test-webapps/test-cdi-common-webapp/pom.xml jetty9-9.4.39/tests/test-webapps/test-cdi-common-webapp/pom.xml
> --- jetty9-9.4.38/tests/test-webapps/test-cdi-common-webapp/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-webapps/test-cdi-common-webapp/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-webapps-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/tests/test-webapps/test-felix-webapp/pom.xml jetty9-9.4.39/tests/test-webapps/test-felix-webapp/pom.xml
> --- jetty9-9.4.38/tests/test-webapps/test-felix-webapp/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-webapps/test-felix-webapp/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-webapps-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/tests/test-webapps/test-http2-webapp/pom.xml jetty9-9.4.39/tests/test-webapps/test-http2-webapp/pom.xml
> --- jetty9-9.4.38/tests/test-webapps/test-http2-webapp/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-webapps/test-http2-webapp/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-webapps-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/tests/test-webapps/test-jaas-webapp/pom.xml jetty9-9.4.39/tests/test-webapps/test-jaas-webapp/pom.xml
> --- jetty9-9.4.38/tests/test-webapps/test-jaas-webapp/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-webapps/test-jaas-webapp/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -4,7 +4,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-webapps-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <artifactId>test-jaas-webapp</artifactId>
> <name>Jetty Tests :: WebApp :: JAAS</name>
> diff -Nru jetty9-9.4.38/tests/test-webapps/test-jetty-webapp/pom.xml jetty9-9.4.39/tests/test-webapps/test-jetty-webapp/pom.xml
> --- jetty9-9.4.38/tests/test-webapps/test-jetty-webapp/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-webapps/test-jetty-webapp/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-webapps-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> <relativePath>../pom.xml</relativePath>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/tests/test-webapps/test-jndi-webapp/pom.xml jetty9-9.4.39/tests/test-webapps/test-jndi-webapp/pom.xml
> --- jetty9-9.4.38/tests/test-webapps/test-jndi-webapp/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-webapps/test-jndi-webapp/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -4,7 +4,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-webapps-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <artifactId>test-jndi-webapp</artifactId>
> <name>Jetty Tests :: WebApp :: JNDI</name>
> diff -Nru jetty9-9.4.38/tests/test-webapps/test-mock-resources/pom.xml jetty9-9.4.39/tests/test-webapps/test-mock-resources/pom.xml
> --- jetty9-9.4.38/tests/test-webapps/test-mock-resources/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-webapps/test-mock-resources/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-webapps-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <name>Jetty Tests :: WebApp :: Mock Resources</name>
> <artifactId>test-mock-resources</artifactId>
> diff -Nru jetty9-9.4.38/tests/test-webapps/test-owb-cdi-webapp/pom.xml jetty9-9.4.39/tests/test-webapps/test-owb-cdi-webapp/pom.xml
> --- jetty9-9.4.38/tests/test-webapps/test-owb-cdi-webapp/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-webapps/test-owb-cdi-webapp/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-webapps-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/tests/test-webapps/test-proxy-webapp/pom.xml jetty9-9.4.39/tests/test-webapps/test-proxy-webapp/pom.xml
> --- jetty9-9.4.38/tests/test-webapps/test-proxy-webapp/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-webapps/test-proxy-webapp/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-webapps-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> <relativePath>../pom.xml</relativePath>
> </parent>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/tests/test-webapps/test-servlet-spec/pom.xml jetty9-9.4.39/tests/test-webapps/test-servlet-spec/pom.xml
> --- jetty9-9.4.38/tests/test-webapps/test-servlet-spec/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-webapps/test-servlet-spec/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -4,7 +4,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-webapps-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <artifactId>test-servlet-spec-parent</artifactId>
> <name>Jetty Tests :: Spec Test WebApp :: Parent</name>
> diff -Nru jetty9-9.4.38/tests/test-webapps/test-servlet-spec/test-container-initializer/pom.xml jetty9-9.4.39/tests/test-webapps/test-servlet-spec/test-container-initializer/pom.xml
> --- jetty9-9.4.38/tests/test-webapps/test-servlet-spec/test-container-initializer/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-webapps/test-servlet-spec/test-container-initializer/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-servlet-spec-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <artifactId>test-container-initializer</artifactId>
> <packaging>jar</packaging>
> diff -Nru jetty9-9.4.38/tests/test-webapps/test-servlet-spec/test-spec-webapp/pom.xml jetty9-9.4.39/tests/test-webapps/test-servlet-spec/test-spec-webapp/pom.xml
> --- jetty9-9.4.38/tests/test-webapps/test-servlet-spec/test-spec-webapp/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-webapps/test-servlet-spec/test-spec-webapp/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -4,7 +4,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-servlet-spec-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <name>Jetty Tests :: Webapps :: Spec Webapp</name>
> <artifactId>test-spec-webapp</artifactId>
> diff -Nru jetty9-9.4.38/tests/test-webapps/test-servlet-spec/test-web-fragment/pom.xml jetty9-9.4.39/tests/test-webapps/test-servlet-spec/test-web-fragment/pom.xml
> --- jetty9-9.4.38/tests/test-webapps/test-servlet-spec/test-web-fragment/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-webapps/test-servlet-spec/test-web-fragment/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-servlet-spec-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <name>Jetty Tests :: WebApp :: Servlet Spec :: Fragment Jar</name>
> diff -Nru jetty9-9.4.38/tests/test-webapps/test-simple-webapp/pom.xml jetty9-9.4.39/tests/test-webapps/test-simple-webapp/pom.xml
> --- jetty9-9.4.38/tests/test-webapps/test-simple-webapp/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-webapps/test-simple-webapp/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -4,7 +4,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-webapps-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <artifactId>test-simple-webapp</artifactId>
> diff -Nru jetty9-9.4.38/tests/test-webapps/test-webapp-rfc2616/pom.xml jetty9-9.4.39/tests/test-webapps/test-webapp-rfc2616/pom.xml
> --- jetty9-9.4.38/tests/test-webapps/test-webapp-rfc2616/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-webapps/test-webapp-rfc2616/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -4,7 +4,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-webapps-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
> <artifactId>test-webapp-rfc2616</artifactId>
> <name>Jetty Tests :: WebApp :: RFC2616</name>
> diff -Nru jetty9-9.4.38/tests/test-webapps/test-websocket-client-provided-webapp/pom.xml jetty9-9.4.39/tests/test-webapps/test-websocket-client-provided-webapp/pom.xml
> --- jetty9-9.4.38/tests/test-webapps/test-websocket-client-provided-webapp/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-webapps/test-websocket-client-provided-webapp/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-webapps-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/tests/test-webapps/test-websocket-client-webapp/pom.xml jetty9-9.4.39/tests/test-webapps/test-websocket-client-webapp/pom.xml
> --- jetty9-9.4.38/tests/test-webapps/test-websocket-client-webapp/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-webapps/test-websocket-client-webapp/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-webapps-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/tests/test-webapps/test-weld-cdi-webapp/pom.xml jetty9-9.4.39/tests/test-webapps/test-weld-cdi-webapp/pom.xml
> --- jetty9-9.4.38/tests/test-webapps/test-weld-cdi-webapp/pom.xml 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/tests/test-webapps/test-weld-cdi-webapp/pom.xml 2021-03-25 15:36:22.000000000 +0100
> @@ -3,7 +3,7 @@
> <parent>
> <groupId>org.eclipse.jetty.tests</groupId>
> <artifactId>test-webapps-parent</artifactId>
> - <version>9.4.38.v20210224</version>
> + <version>9.4.39.v20210325</version>
> </parent>
>
> <modelVersion>4.0.0</modelVersion>
> diff -Nru jetty9-9.4.38/VERSION.txt jetty9-9.4.39/VERSION.txt
> --- jetty9-9.4.38/VERSION.txt 2021-02-24 21:16:09.000000000 +0100
> +++ jetty9-9.4.39/VERSION.txt 2021-03-25 15:36:22.000000000 +0100
> @@ -1,5 +1,19 @@
> +jetty-9.4.39.v20210325 - 25 March 2021
> + + 6034 SslContextFactory may select a wildcard certificate during SNI
> + selection when a more specific SSL certificate is present
> + + 6050 Websocket: NotUtf8Exception after upgrade 9.4.35 -> 9.4.36 or newer
> + + 6052 Cleanup TypeUtil and ModuleLocation to allow jetty-client/hybrid to
> + work on Android
> + + 6063 Allow override of hazelcast version when using module
> + + 6072 jetty server high CPU when client send data length > 17408
> + + 6085 Jetty keeps Sessions in use after "Duplicate valid session cookies"
> + Message
> + + 6101 Normalise ambiguous URIs
> + + 6102 Exclude webapps directory from deployment scan
> +
> jetty-9.4.38.v20210224 - 24 February 2021
> + 4275 Path Normalization/Traversal - Context Matching
> + + 5963 Improve QuotedQualityCSV for CVE-2020-27223
> + 5977 Cache-Control header set by a filter is override by the value from
> DefaultServlet configuration
> + 5994 QueuedThreadPool "free" threads
> @@ -16,6 +30,7 @@
> + 5909 Cannot disable HTTP OPTIONS Method
> + 5937 Unnecessary blocking in ResourceService
> + 5950 Deadlock due to logging inside classloaders
> + + 5963 Improve QuotedQualityCSV - Resolves CVE-2020-27223
> + 5973 Proxy client TLS authentication example
> + 5977 Cache-Control header set by a filter is override by the value from
> DefaultServlet configuration
> @@ -71,7 +86,7 @@
> produced by ForwardedHeader
> + 5443 Request without Host header fails with NullPointerException in
> ForwardedRequestCustomizer
> - + 5451 Improve Working Directory creation
> + + 5451 Improve Working Directory creation - Resolves CVE-2020-27216
> + 5454 Request error context is not reset
> + 5475 Update to spifly 1.3.2 and asm 9
> + 5480 NPE from WebInfConfiguration.deconfigure during WebAppContext shutdown
> @@ -170,7 +185,8 @@
> + 4923 SecureRequestCustomizer.SslAttributes does not cache cert chain like
> before
> + 4929 HttpClient: HttpCookieStore.Empty prevents sending cookies
> - + 4936 Response header overflow leads to buffer corruptions
> + + 4936 Response header overflow leads to buffer corruptions - Resolves
> + CVE-2019-17638
>
> jetty-9.4.29.v20200521 - 21 May 2020
> + 2188 Lock contention creating HTTP/2 streams
> @@ -307,7 +323,7 @@
> + 3083 The ini-template for jetty.console-capture.dir does not match the
> default value
> + 4128 OpenIdCredetials can't decode JWT ID token
> - + 4334 Better test ErrorHandler changes
> + + 4334 Better test ErrorHandler changes - Resolves CVE-2019-17632
>
> jetty-9.4.23.v20191118 - 18 November 2019
> + 1485 Add systemd service file
> @@ -397,6 +413,8 @@
> inclusion of sessionid
>
> jetty-9.4.21.v20190926 - 26 September 2019
> + + Includes fixes for CVE-2019-9511, CVE-2019-9512, CVE-2019-9514,
> + CVE-2019-9515, CVE-2019-9516, and CVE-2019-9518
> + 97 Permanent UnavailableException thrown during servlet request handling
> should cause servlet destroy
> + 137 Support OAuth
> @@ -542,8 +560,10 @@
> jetty-9.4.17.v20190418 - 18 April 2019
> + 2140 Infinispan and hazelcast changes to scavenge zombie expired sessions
> + 3464 Split SslContextFactory into Client and Server
> - + 3549 Directory Listing on Windows reveals Resource Base path
> - + 3555 DefaultHandler Reveals Base Resource Path of each Context
> + + 3549 Directory Listing on Windows reveals Resource Base path - Resolves
> + CVE-2019-10246
> + + 3555 DefaultHandler Reveals Base Resource Path of each Context - Resolves
> + CVE-2019-10247
>
> jetty-9.4.16.v20190411 - 11 April 2019
> + 1861 Limit total bytes pooled by ByteBufferPools
> @@ -551,7 +571,8 @@
> + 3159 WebSocket permessage-deflate RSV1 validity check
> + 3274 OSGi versions of java.base classes in
> org.apache.felix:org.osgi.foundation:jar conflicts with new rules on Java 9+
> - + 3319 Modernize Directory Listing: HTML5 and Sorting
> + + 3319 Modernize Directory Listing: HTML5 and Sorting - Resolves
> + CVE-2019-10241
> + 3361 HandlerCollection.addHandler is lacking synchronization
> + 3373 OutOfMemoryError: Java heap space in GZIPContentDecoder
> + 3389 Websockets jsr356 willDecode not invoked during decoding
> @@ -624,8 +645,10 @@
> + 4217 SslConnection.DecryptedEnpoint.flush eternal busy loop
>
> jetty-9.3.27.v20190418 - 18 April 2019
> - + 3549 Directory Listing on Windows reveals Resource Base path
> - + 3555 DefaultHandler Reveals Base Resource Path of each Context
> + + 3549 Directory Listing on Windows reveals Resource Base path - Resolves
> + CVE-2019-10246
> + + 3555 DefaultHandler Reveals Base Resource Path of each Context - Resolves
> + CVE-2019-10247
>
> jetty-9.3.26.v20190403 - 03 April 2019
> + 2954 Improve cause reporting for HttpClient failures
> @@ -633,17 +656,20 @@
> org.apache.felix:org.osgi.foundation:jar conflicts with new rules on Java 9+
> + 3302 Support host:port in X-Forwarded-For header in
> ForwardedRequestCustomizer
> - + 3319 Allow reverse sort for directory listed files
> + + 3319 Allow reverse sort for directory listed files - Resolves CVE-2019-10241
>
> jetty-9.2.29.v20191105 - 05 November 2019
> + 4217 SslConnection.DecryptedEnpoint.flush eternal busy loop
>
> jetty-9.2.28.v20190418 - 18 April 2019
> - + 3549 Directory Listing on Windows reveals Resource Base path
> - + 3555 DefaultHandler Reveals Base Resource Path of each Context
> + + 3549 Directory Listing on Windows reveals Resource Base path - Resolves
> + CVE-2019-10246
> + + 3555 DefaultHandler Reveals Base Resource Path of each Context - Resolves
> + CVE-2019-10247
>
> jetty-9.2.27.v20190403 - 03 April 2019
> - + 3319 Refactored Directory Listing to modernize and avoid XSS
> + + 3319 Refactored Directory Listing to modernize and avoid XSS - Resolves
> + CVE-2019-10241
>
> jetty-9.4.14.v20181114 - 14 November 2018
> + 3097 Duplicated programmatic Servlet Listeners causing duplicate calls
--
Sebastian Ramacher
Attachment:
signature.asc
Description: PGP signature