Update of /var/cvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib
In directory james.mmbase.org:/tmp/cvs-serv22795

Modified Files:
        ContextTag.java 
Log Message:
Related to fix for MMB-1730. Make sure no pagecontexts and those kind of things 
are stored in requests and sessions and so on


See also: 
http://cvs.mmbase.org/viewcvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib
See also: http://www.mmbase.org/jira/browse/MMB-1730


Index: ContextTag.java
===================================================================
RCS file: 
/var/cvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib/ContextTag.java,v
retrieving revision 1.92
retrieving revision 1.93
diff -u -b -r1.92 -r1.93
--- ContextTag.java     7 Oct 2008 10:39:48 -0000       1.92
+++ ContextTag.java     13 Oct 2008 12:04:30 -0000      1.93
@@ -11,6 +11,8 @@
 import java.io.IOException;
 
 import javax.servlet.jsp.*;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletRequestWrapper;
 
 import org.mmbase.bridge.*;
 import org.mmbase.bridge.jsp.taglib.util.*;
@@ -43,7 +45,7 @@
  * </p>
  *
  * @author Michiel Meeuwissen
- * @version $Id: ContextTag.java,v 1.92 2008/10/07 10:39:48 michiel Exp $
+ * @version $Id: ContextTag.java,v 1.93 2008/10/13 12:04:30 michiel Exp $
  * @see ImportTag
  * @see WriteTag
  */
@@ -134,6 +136,18 @@
         return (ContextContainer)pageContext.getAttribute(CONTAINER_KEY_PREFIX 
+ number);
     }
 
+
+    /**
+     * @since MMBase-1.9
+     */
+    protected static ServletRequest unwrap(ServletRequest req) {
+        while (req instanceof ServletRequestWrapper) {
+            req = ((ServletRequestWrapper) req).getRequest();
+        }
+        return req;
+    }
+
+
     public int doStartTag() throws JspTagException {
         log.debug("Start tag of ContextTag");
         ContextContainer container;
@@ -160,6 +174,21 @@
                 container = (ContextContainer)  o;
                 log.debug("Resetting parent of " + container + " to " + 
getContextProvider().getContextContainer());
                 prevParent = container.getParent();
+                if (prevParent instanceof PageContextContainer) {
+                    // if for some reason, the parent in the container is from 
a different
+                    // request. Do not accept that.
+                    PageContextContainer prevPc = (PageContextContainer) 
prevParent;
+                    if (((PageContextBacking) 
prevPc.getBacking()).getPageContext() != pageContext) {
+                        ServletRequest prevReq = unwrap(((PageContextBacking) 
prevPc.getBacking()).getPageContext().getRequest());
+                        if (prevReq != unwrap(pageContext.getRequest())) {
+                            log.warn("found a pagecontext container for a 
different request (" + prevReq + " !=  '" + pageContext.getRequest() + "'). 
Reparing");
+                        } else {
+                            log.debug("found a pagecontext container for a 
different pageContext. Reparing");
+                        }
+                        prevParent = new PageContextContainer(pageContext);
+                    }
+                }
+
                 container.setParent(pageContext, 
getContextProvider().getContextContainer());
                 pageContext.setAttribute(CONTAINER_KEY_PREFIX + number, 
container, PageContext.PAGE_SCOPE);
             }
@@ -173,7 +202,8 @@
             if (id == null) {
                 id = referid.getString(this);
             }
-            pageContext.setAttribute(id, container, s);
+            ContextContainer storedContainer =  new 
StandaloneContextContainer(id, container.getBacking().getOriginalMap());
+            pageContext.setAttribute(id, storedContainer, s);
         }
         setCloudContext(getContextTag().cloudContext);
         if (getId() != null) {
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to