diff --git a/wicket-core-tests/src/test/java/org/apache/wicket/core/request/mapper/CryptoMapperTest.java b/wicket-core-tests/src/test/java/org/apache/wicket/core/request/mapper/CryptoMapperTest.java index 41ab1c2e6c3..e08d28f6751 100644 --- a/wicket-core-tests/src/test/java/org/apache/wicket/core/request/mapper/CryptoMapperTest.java +++ b/wicket-core-tests/src/test/java/org/apache/wicket/core/request/mapper/CryptoMapperTest.java @@ -281,6 +281,24 @@ void bookmarkablePageForceEncryptionOfRequestListener() assertNull(mapper.mapRequest(getRequest(plainUrl))); } + /** + * Tests that plaintext IRequestListener parameters cannot be appended to an otherwise + * encrypted bookmarkable page URL. + */ + @Test + void bookmarkablePageForceEncryptionOfAppendedRequestListener() + { + PageAndComponentProvider provider = new PageAndComponentProvider(Page2.class, "link"); + IRequestHandler requestHandler = new BookmarkableListenerRequestHandler(provider); + Url plainListenerUrl = mapper.getDelegateMapper().mapHandler(requestHandler); + Url encryptedUrl = mapper.mapHandler( + new RenderPageRequestHandler(new PageProvider(Page2.class, new PageParameters()))); + + encryptedUrl.getQueryParameters().addAll(plainListenerUrl.getQueryParameters()); + + assertNull(mapper.mapRequest(getRequest(encryptedUrl))); + } + /** * Tests that URLs for page instances are encrypted (/wicket/page?5) */ diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/CryptoMapper.java b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/CryptoMapper.java index 333250ecbff..86a72007ea7 100755 --- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/CryptoMapper.java +++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/CryptoMapper.java @@ -531,12 +531,20 @@ protected Url decryptEntireUrl(final Request request, final Url encryptedUrl) { // modified or additional segment url.getSegments().add(encryptedUrl.getSegments().get(segNo)); - } - - url.getQueryParameters().addAll(originalUrl.getQueryParameters()); - // WICKET-4923 additional parameters - url.getQueryParameters().addAll(encryptedUrl.getQueryParameters()); - + } + + for (Url.QueryParameter queryParameter : encryptedUrl.getQueryParameters()) + { + if (MapperUtils.parsePageComponentInfoParameter(queryParameter) != null) + { + return null; + } + } + + url.getQueryParameters().addAll(originalUrl.getQueryParameters()); + // WICKET-4923 additional parameters + url.getQueryParameters().addAll(encryptedUrl.getQueryParameters()); + return url; }