diff options
Diffstat (limited to 'jetty-server/src/main/java/org/eclipse/jetty/server/handler/HandlerCollection.java')
-rw-r--r-- | jetty-server/src/main/java/org/eclipse/jetty/server/handler/HandlerCollection.java | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/HandlerCollection.java b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/HandlerCollection.java index 4a98f786bd..0a085ffa5b 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/HandlerCollection.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/HandlerCollection.java @@ -27,6 +27,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jetty.server.Handler; +import org.eclipse.jetty.server.HandlerContainer; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.util.ArrayUtil; import org.eclipse.jetty.util.MultiException; @@ -81,9 +82,18 @@ public class HandlerCollection extends AbstractHandlerContainer throw new IllegalStateException(STARTED); if (handlers!=null) + { + // check for loops + for (Handler handler:handlers) + if (handler == this || (handler instanceof HandlerContainer && + Arrays.asList(((HandlerContainer)handler).getChildHandlers()).contains(this))) + throw new IllegalStateException("setHandler loop"); + + // Set server for (Handler handler:handlers) if (handler.getServer()!=getServer()) handler.setServer(getServer()); + } Handler[] old=_handlers;; _handlers = handlers; updateBeans(old, handlers); |