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

Work on CAMEL-26086 started by shashank.
----------------------------------------
> camel-stax - xtokenize mode 't' returns undecoded markup and loses CDATA, and 
> modes 'i' and 'u' cut the start tag at a '>' inside an attribute value
> ----------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-26086
>                 URL: https://issues.apache.org/jira/browse/CAMEL-26086
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-stax
>            Reporter: shashank
>            Assignee: shashank
>            Priority: Major
>
> {{XMLTokenExpressionIterator}} (the {{xtokenize}} language, main 
> 6a2f66ddec3e) builds the token of a mode from the raw text of the matched 
> element, in two places not as an XML parser reads it. Valid XML then gives 
> wrong tokens without an error.
> * Mode {{t}} ("extracting the text content of the specified element") copies 
> the characters between each {{>}} and the next {{<}}: {{<order>AT&amp;T 
> &lt;5&gt;</order>}} gives {{AT&amp;T &lt;5&gt;}} instead of {{AT&T <5>}}, and 
> {{<order><![CDATA[a<b]]></order>}} gives an empty string. With a {{group}} 
> above 1 the {{<group>}} element can get a stray {{]]>}} and is no longer XML.
> * Modes {{i}} (default) and {{u}} take the start tag up to the first {{>}}, 
> which can be inside a quoted attribute value. Mode {{i}} then inserts the 
> inherited namespace declarations inside the attribute: {{<orders 
> xmlns='urn:orders'><order note='qty > 5'>1</order></orders>}} with 
> {{xtokenize("//o:order")}} gives {{<order note='qty  xmlns="urn:orders"> 
> 5'>1</order>}}: the element loses its namespace and {{note}} changes. In mode 
> {{u}} the content starts with the rest of the start tag.
> *Fix*: mode {{t}} reads the text of the token with a StAX reader (no DTD, no 
> external entities, coalescing, not namespace aware as the token may use 
> prefixes of its ancestors): entity references decoded, CDATA included, 
> comments and PIs left out; in a group the texts are escaped as XML text. 
> Modes {{i}} and {{u}} find the end of the start tag with a quote-aware scan. 
> Upgrade guide 4.24 entry for the text mode.
> *Tests*: new {{XMLTokenizeTextAndStartTagTest}}, 6 tests, all fail on main, 
> for example {{Expected: <AT&T <5>> but was: <AT&amp;T &lt;5&gt;>}}, 
> {{Expected: <a<b> but was: <>}}, {{expected: <urn:orders> but was: <null>}}. 
> Unit tests of camel-stax with the fix: 116 run, 0 failures, 2 skipped. A 
> differential run against a namespace-aware DOM parser on 20,000 generated 
> documents (together with the related xtokenize fix for comments before the 
> root and the wrap mode): modes {{i}}, {{t}} and {{u}} agree with the parser 
> on every document.
> *Related*: a document starting with a comment or doctype without an XML 
> declaration fails in every mode, and mode {{w}} with matches at different 
> depths throws {{IndexOutOfBoundsException}}: separate issue.
> *How it was found*: a reference differential of {{xtokenize}} against a DOM 
> parser.
> *Affected*: main, camel-4.23.x, camel-4.22.x, camel-4.18.x and camel-4.14.x 
> (same code). Read, not run. The fix uses {{EscapeHelper.xml}} (CAMEL-24802), 
> which camel-4.22.x and older do not have.
> _Filed with Claude Code on behalf of allthingssecurity._



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to