You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-issues@jackrabbit.apache.org by "Chetan Mehrotra (JIRA)" <ji...@apache.org> on 2013/10/07 14:40:47 UTC
[jira] [Updated] (OAK-1081) Node.getNodes throwing exception if
user does not have access to any child node
[ https://issues.apache.org/jira/browse/OAK-1081?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Chetan Mehrotra updated OAK-1081:
---------------------------------
Attachment: OAK-1081-testcase.patch
OAK-1081-fix.patch
> Node.getNodes throwing exception if user does not have access to any child node
> -------------------------------------------------------------------------------
>
> Key: OAK-1081
> URL: https://issues.apache.org/jira/browse/OAK-1081
> Project: Jackrabbit Oak
> Issue Type: Bug
> Components: core, security
> Affects Versions: 0.9
> Reporter: Chetan Mehrotra
> Priority: Minor
> Attachments: OAK-1081-fix.patch, OAK-1081-testcase.patch
>
>
> When trying to obtain child iterator via Node.getNodes {{InvalidItemStateException}} is thrown if user does not have access to its content
> {code:java}
> @Test
> public void testGetChildren() throws Exception {
> deny(path, privilegesFromName(PrivilegeConstants.JCR_ADD_CHILD_NODES));
> NodeIterator it1 = testSession.getNode(path).getNodes();
> while(it1.hasNext()){
> Node n = it1.nextNode();
> NodeIterator it2 = n.getNodes();
> }
> }
> {code}
> Executing above code leads to following exception
> {noformat}
> javax.jcr.InvalidItemStateException: Item is stale
> at org.apache.jackrabbit.oak.jcr.delegate.NodeDelegate.getTree(NodeDelegate.java:827)
> at org.apache.jackrabbit.oak.jcr.delegate.NodeDelegate.getChildren(NodeDelegate.java:336)
> at org.apache.jackrabbit.oak.jcr.session.NodeImpl$8.perform(NodeImpl.java:546)
> at org.apache.jackrabbit.oak.jcr.session.NodeImpl$8.perform(NodeImpl.java:543)
> at org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.perform(SessionDelegate.java:125)
> at org.apache.jackrabbit.oak.jcr.session.ItemImpl.perform(ItemImpl.java:113)
> at org.apache.jackrabbit.oak.jcr.session.NodeImpl.getNodes(NodeImpl.java:543)
> at org.apache.jackrabbit.oak.jcr.security.authorization.ReadPropertyTest.testGetChildren(ReadPropertyTest.java:135)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at org.apache.jackrabbit.test.AbstractJCRTest.run(AbstractJCRTest.java:464)
> at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
> at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
> at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:77)
> at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:195)
> at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
> {noformat}
> The exception is thrown for path {{/testroot/node1/rep:policy}}.
> The issue occurs because the {{NodeIterator}} {{it1}} includes {{rep:policy}} and later when its child are accessed security check leads to exception. Probably the {{it1}} should not include {{rep:policy}} as part of child list and filter it out
--
This message was sent by Atlassian JIRA
(v6.1#6144)