Author: michiel
Date: 2009-07-08 13:03:18 +0200 (Wed, 08 Jul 2009)
New Revision: 36647

Modified:
   
mmbase/trunk/core/src/main/java/org/mmbase/bridge/implementation/AbstractNodeList.java
Log:
returning null in nodelists give very enigmatic results. This happens if 
encountering a node which cannot be read. This is actually impossible, but 
perhaps security implementaiton is erroreous?

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/bridge/implementation/AbstractNodeList.java
===================================================================
--- 
mmbase/trunk/core/src/main/java/org/mmbase/bridge/implementation/AbstractNodeList.java
      2009-07-08 09:59:47 UTC (rev 36646)
+++ 
mmbase/trunk/core/src/main/java/org/mmbase/bridge/implementation/AbstractNodeList.java
      2009-07-08 11:03:18 UTC (rev 36647)
@@ -9,8 +9,7 @@
 */
 package org.mmbase.bridge.implementation;
 
-import java.util.Collection;
-import java.util.Map;
+import java.util.*;
 
 import org.mmbase.bridge.*;
 import org.mmbase.bridge.util.MapNode;
@@ -138,10 +137,10 @@
                 try {
                     node = cloud.getNodeManager(builderName);
                 } catch (Throwable t) {
-                    node = getNode(cloud, coreNode);
+                    node = getNode(cloud, nodeManager, coreNode);
                 }
             } else {
-                node = getNode(cloud, coreNode);
+                node = getNode(cloud, nodeManager, coreNode);
             }
         } else if (coreBuilder instanceof RelDef) {
             node = cloud.getRelationManager(coreNode.getStringValue("sname"));
@@ -172,7 +171,7 @@
             }
             node = cloud.getRelationManager(nm1.getName(), nm2.getName(), 
role.getStringValue("sname"));
         } else if(coreBuilder instanceof InsRel) {
-            node = getNode(cloud, coreNode);
+            node = getNode(cloud, nodeManager, coreNode);
         } else if (coreNode instanceof org.mmbase.module.core.VirtualNode) {
             MMObjectBuilder builder = coreNode.getBuilder();
             if (builder instanceof VirtualBuilder) {
@@ -191,7 +190,7 @@
                 node = new VirtualNode(cloud, 
(org.mmbase.module.core.VirtualNode) coreNode, 
cloud.getNodeManager(builder.getObjectType()));
             }
         } else {
-            node =  getNode(cloud, coreNode);
+            node =  getNode(cloud, nodeManager, coreNode);
         }
         return node;
     }
@@ -211,7 +210,7 @@
     /**
      * @since MMBase-1.8.4
      */
-    protected static Node getNode(Cloud cloud, MMObjectNode coreNode) {
+    protected static Node getNode(Cloud cloud, NodeManager nodeManager, 
MMObjectNode coreNode) {
         int n = coreNode.getNumber();
         if (n == -1) {
             String[] na  = coreNode.getStringValue("_number").split("_");
@@ -226,7 +225,16 @@
             }
         } else {
             if (cloud.hasNode(n)) {
-                return cloud.getNode(n);
+                if (cloud.mayRead(n)) {
+                    return cloud.getNode(n);
+                } else {
+                    Map<String, Object> map = new HashMap<String, Object>();
+                    map.put("number", n);
+                    if (nodeManager == null) nodeManager = 
cloud.getNodeManager("object");
+                    Node placeHolder = new MapNode<Object>(map, nodeManager);
+                    log.warn("List containing a node which may not be read. 
Bug in Security implmentation?. Returning a placeholder for now: " + 
placeHolder + " " + nodeManager, new Exception());
+                    return placeHolder;
+                }
             } else {
                 return new BasicNode(coreNode, (BasicCloud) cloud);
             }

_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to