Federico Mariani created CAMEL-23989:
----------------------------------------

             Summary: camel-yaml-dsl - YamlDeserializerSupport.nodeAt() matches 
later pointer segments at the wrong depth instead of returning null
                 Key: CAMEL-23989
                 URL: https://issues.apache.org/jira/browse/CAMEL-23989
             Project: Camel
          Issue Type: Bug
          Components: camel-yaml-dsl
    Affects Versions: 4.21.0
            Reporter: Federico Mariani


In {{YamlDeserializerSupport.nodeAt}} 
({{dsl/camel-yaml-dsl/camel-yaml-dsl-common/.../YamlDeserializerSupport.java:414-435}})
 the outer loop over {{pointer.split("/")}} continues to the next segment when 
a segment is not found, so it keeps scanning the *same* mapping node for 
*deeper* segment names, and the remainder computation 
{{pointer.substring(path.length() + 1)}} is only correct for the first segment.

Failure scenario: {{nodeAt(root, "/spec/template")}} on a document with no 
{{spec}} key but a top-level {{template}} key: the loop falls through to {{path 
= "template"}}, matches the root-level {{template}}, computes {{next = 
"plate"}} and recurses into it — returning a wrong node, or throwing 
{{InvalidNodeTypeException}} from {{asMappingNode()}} when the value is a 
scalar, instead of returning null as the contract implies. Any 
malformed/partial Kamelet or Pipe document can trigger this via 
{{KameletRoutesBuilderLoader}}/{{YamlRoutesBuilderLoader}}.

Important for the fix: the leading-{{/}} pointers used by the loaders only work 
*because* of this fallthrough (the empty first segment never matches), so empty 
segments must still be skipped while stopping the cross-level matching. 
Unchanged since CAMEL-16570; the fallthrough looks accidental, not a feature.

_Filed by Claude Code on behalf of Croway._



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

Reply via email to