[
https://issues.apache.org/jira/browse/JXPATH-76?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Matt Benson resolved JXPATH-76.
-------------------------------
Resolution: Fixed
Fix Version/s: 1.3
It takes less analysis on my part (as a self-appointed, but non-expert,
custodian of JXPath) to simply synchronize these methods, which I have done in
SVN HEAD. Thanks for the report!
> CompiledExpression not completely thread-safe
> ---------------------------------------------
>
> Key: JXPATH-76
> URL: https://issues.apache.org/jira/browse/JXPATH-76
> Project: Commons JXPath
> Issue Type: Bug
> Affects Versions: 1.2 Final
> Reporter: Simon Raess
> Fix For: 1.3
>
> Attachments: jxpath.patch
>
>
> Some classes in compiled expressions are not thread-safe, because they lazily
> initialize some information that should be initialized at object
> construction. The classes I've found are Path and ExpressionPath. I've
> attached a path that fixes the problem.
> When two threads tried to initialize such an object concurrently, it was
> possible that the expression was evaluated as simple expression when it
> should have been evaluated as complex expression. See the two stack traces
> below (using xpath expression //ExternalData/Order/@id). The first stack
> trace shows the bug in action, the second how it should look:
> caused by java.lang.UnsupportedOperationException: Not supported node test
> for attributes: node()
> at
> org.apache.commons.jxpath.ri.axes.SimplePathInterpreter.getNodeIterator(SimplePathInterpreter.java(Compiled
> Code))
> at
> org.apache.commons.jxpath.ri.axes.SimplePathInterpreter.doStepNoPredicatesStandard(SimplePathInterpreter.java(Compiled
> Code))
> at
> org.apache.commons.jxpath.ri.axes.SimplePathInterpreter.doStep(SimplePathInterpreter.java(Compiled
> Code))
> at
> org.apache.commons.jxpath.ri.axes.SimplePathInterpreter.interpretSimpleLocationPath(SimplePathInterpreter.java(Inlined
> Compiled Code))
> at
> org.apache.commons.jxpath.ri.compiler.Path.getSingleNodePointerForSteps(Path.java(Inlined
> Compiled Code))
> at
> org.apache.commons.jxpath.ri.compiler.LocationPath.computeValue(LocationPath.java(Compiled
> Code))
> at
> org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getPointer(JXPathContextReferenceImpl.java(Compiled
> Code))
> at
> org.apache.commons.jxpath.ri.JXPathCompiledExpression.selectSingleNode(JXPathCompiledExpression.java(Inlined
> Compiled Code))
> This replaces the lines starting at Path.getSingleNodePointerForSteps:
> LocationPath(Path).searchForPath(EvalContext) line: 183
> LocationPath(Path).getSingleNodePointerForSteps(EvalContext) line:
> 159
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]