You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2010/10/21 06:39:59 UTC
svn commit: r1025820 -
/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/io/SerializableChecker.java
Author: ivaynberg
Date: Thu Oct 21 04:39:59 2010
New Revision: 1025820
URL: http://svn.apache.org/viewvc?rev=1025820&view=rev
Log:
fixed the rare but seriously annoying stack overflow in serializable checker. had to do with checking objects that override serialization.
Modified:
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/io/SerializableChecker.java
Modified: wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/io/SerializableChecker.java
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/io/SerializableChecker.java?rev=1025820&r1=1025819&r2=1025820&view=diff
==============================================================================
--- wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/io/SerializableChecker.java (original)
+++ wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/io/SerializableChecker.java Thu Oct 21 04:39:59 2010
@@ -34,6 +34,7 @@ import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Map;
+import java.util.Stack;
import org.apache.wicket.Component;
import org.apache.wicket.WicketRuntimeException;
@@ -302,6 +303,8 @@ public final class SerializableChecker e
/** Exception that should be set as the cause when throwing a new exception. */
private final NotSerializableException exception;
+ private final Stack<Object> stack = new Stack<Object>();
+
/**
* Construct.
*
@@ -337,6 +340,29 @@ public final class SerializableChecker e
return;
}
+ if (stack.contains(obj))
+ {
+ return;
+ }
+
+ stack.push(obj);
+ try
+ {
+ internalCheck(obj);
+ }
+ finally
+ {
+ stack.pop();
+ }
+ }
+
+ private void internalCheck(Object obj)
+ {
+ if (obj == null)
+ {
+ return;
+ }
+
Class<?> cls = obj.getClass();
nameStack.add(simpleName);
traceStack.add(new TraceSlot(obj, fieldDescription));