[ 
https://issues.apache.org/jira/browse/OAK-11811?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Manfred Baedke reassigned OAK-11811:
------------------------------------

    Assignee: Manfred Baedke

> Resolve questionable recursion in NodeTypeImpl
> ----------------------------------------------
>
>                 Key: OAK-11811
>                 URL: https://issues.apache.org/jira/browse/OAK-11811
>             Project: Jackrabbit Oak
>          Issue Type: Task
>          Components: core
>    Affects Versions: 1.80.0
>            Reporter: Joerg Hoh
>            Assignee: Manfred Baedke
>            Priority: Major
>
> NodeTypeImpl.internalIsNodeType does a recursive call to itself, but it 
> re-uses the same parameter {{oakName}} which it is getting passed. That means 
> it either returns early or runs into an endless recursion. 
> [Github|https://github.com/apache/jackrabbit-oak/blob/06b7ff2278cdfe432c2ed7cfcdb17f195fca9722/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/NodeTypeImpl.java#L494-L504]
> {noformat}
>     boolean internalIsNodeType(String oakName) {
>         if (getOakName().equals(oakName)) {
>             return true;
>         }
>         for (NodeType type : getDeclaredSupertypes()) {
>             if (((NodeTypeImpl) type).internalIsNodeType(oakName)) {
>                 return true;
>             }
>         }
>         return false;
>     }
> {noformat}
> A quick test shows, that with this diff applied it also passes all unittests:
> {noformat}
> @@ -496,7 +496,7 @@ class NodeTypeImpl extends AbstractTypeDefinition 
> implements NodeType {
>              return true;
>          }
>          for (NodeType type : getDeclaredSupertypes()) {
> -            if (((NodeTypeImpl) type).internalIsNodeType(oakName)) {
> +            if (((NodeTypeImpl) type).getOakName().equals(oakName)) {
>                  return true;
>              }
>          }
> {noformat}
> Is this is the correct and intended behavior? I am not entirely sure about 
> this, as it would mean that {{getDeclaredSupertypes()}} would need to return 
> all transitive supertypes as well, and I don't see that in the code.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to