You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2020/10/20 20:10:14 UTC

[wicket] 02/02: WICKET-6845 stackoverflow while serializing a page containing a reference to session

This is an automated email from the ASF dual-hosted git repository.

mgrigorov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git

commit d929d852e75567e32a2864674b821900c4929eed
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
AuthorDate: Tue Oct 20 23:08:19 2020 +0300

    WICKET-6845 stackoverflow while serializing a page containing a reference to session
    
    Remove the page from InSessionPageStore#pages before trying to serialize it to prevent stackoverflow when the page keeps a reference to the Wicket Session.
---
 .../main/java/org/apache/wicket/pageStore/InSessionPageStore.java  | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/wicket-core/src/main/java/org/apache/wicket/pageStore/InSessionPageStore.java b/wicket-core/src/main/java/org/apache/wicket/pageStore/InSessionPageStore.java
index a1beb4d..87cb701 100644
--- a/wicket-core/src/main/java/org/apache/wicket/pageStore/InSessionPageStore.java
+++ b/wicket-core/src/main/java/org/apache/wicket/pageStore/InSessionPageStore.java
@@ -278,15 +278,16 @@ public class InSessionPageStore implements IPageStore
 
 				if ((page instanceof SerializedPage) == false)
 				{
+					pages.remove(p);
 					if (serializer == null)
 					{
-						pages.remove(p);
 						p--;
 					}
 					else
 					{
-						pages.set(p, new SerializedPage(page.getPageId(),
-							Classes.name(page.getClass()), serializer.serialize(page)));
+						byte[] bytes = serializer.serialize(page);
+						SerializedPage serializedPage = new SerializedPage(page.getPageId(), Classes.name(page.getClass()), bytes);
+						pages.add(p, serializedPage);
 					}
 				}
 			}