Bug #2590
closedNPE when saxon:assign refers to an undeclared variable
100%
Description
I obtained a NPE trying to compile a larger XSL.
I reduced the XSL it to this:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:saxon="http://saxon.sf.net/"
extension-element-prefixes="saxon">
<xsl:template name="formatStringByToken" as="text()*">
<xsl:value-of select="$newLine"/>
<saxon:assign name="remain" select="$prmLength"/>
</xsl:template>
</xsl:stylesheet>
When I compile it I obtain:
<pre>
java.lang.NullPointerException
at com.saxonica.xsltextn.style.SaxonAssign.validate(SaxonAssign.java:53)
at net.sf.saxon.style.StyleElement.validateSubtree(StyleElement.java:1610)
at net.sf.saxon.style.StyleElement.validateChildren(StyleElement.java:1645)
at net.sf.saxon.style.StyleElement.validateSubtree(StyleElement.java:1614)
at net.sf.saxon.style.StylesheetPackage.preprocess(StylesheetPackage.java:478)
at net.sf.saxon.style.Compilation.compilePackage(Compilation.java:180)
at net.sf.saxon.style.Compilation.compileSingletonPackage(Compilation.java:94)
at net.sf.saxon.s9api.XsltCompiler.compile(XsltCompiler.java:543)
at net.sf.saxon.jaxp.SaxonTransformerFactory.newTemplates(SaxonTransformerFactory.java:175)
at net.sf.saxon.jaxp.SaxonTransformerFactory.newTransformer(SaxonTransformerFactory.java:129)
at ro.sync.xml.transformer.TransformerCreator.createXSLTransformer(TransformerCreator.java:1453)
at ro.sync.xml.transformer.TransformerCreator.createTransformer(TransformerCreator.java:736)
at ro.sync.xml.transformer.TransformerCreator.createValidationOnlyTransformer(TransformerCreator.java:597)
at ro.sync.exml.validate.scanners.StylesheetErrorScanner.scanInternal(StylesheetErrorScanner.java:370)
at ro.sync.exml.validate.AbstractErrorScanner$1.run(AbstractErrorScanner.java:177)
at ro.sync.exml.validate.AbstractErrorScanner$1.run(AbstractErrorScanner.java:1)
at java.security.AccessController.doPrivileged(Native Method)
at ro.sync.util.security.Sandbox.runWithPerms(Sandbox.java:726)
at ro.sync.exml.validate.AbstractErrorScanner$2$1$1.run(AbstractErrorScanner.java:211)
at ro.sync.exml.validate.AbstractErrorScanner$2$1$1.run(AbstractErrorScanner.java:1)
at ro.sync.util.security.Sandbox.runWithThreadConfirmation(Sandbox.java:921)
at ro.sync.exml.validate.AbstractErrorScanner$2$1.run(AbstractErrorScanner.java:207)
at ro.sync.exml.validate.AbstractErrorScanner$2$1.run(AbstractErrorScanner.java:1)
at ro.sync.util.security.Sandbox.runWithWriteConfirmation(Sandbox.java:898)
at ro.sync.exml.validate.AbstractErrorScanner$2.run(AbstractErrorScanner.java:203)
at ro.sync.exml.validate.AbstractErrorScanner$2.run(AbstractErrorScanner.java:1)
at ro.sync.util.security.Sandbox.runWithConnectConfirmation(Sandbox.java:877)
at ro.sync.exml.validate.AbstractErrorScanner.scan(AbstractErrorScanner.java:200)
at ro.sync.exml.validate.scanners.SynchronizedErrorScanner.scan(SynchronizedErrorScanner.java:123)
at ro.sync.exml.editor.validate.ValidationAssistant.processErrors(ValidationAssistant.java:1244)
at ro.sync.exml.editor.validate.ValidationAssistant.runValidation(ValidationAssistant.java:890)
at ro.sync.exml.editor.validate.ValidationAssistant.runValidation(ValidationAssistant.java:763)
at ro.sync.exml.editor.validate.ValidationAssistant.checkForErrors(ValidationAssistant.java:743)
at ro.sync.exml.editor.validate.ValidationAssistant$2.appRun(ValidationAssistant.java:637)
at ro.sync.ui.application.ApplicationThread.run(ApplicationThread.java:133)
Updated by Michael Kay almost 9 years ago
- Subject changed from NPE obtained with Saxon 9.6.0.6 EE to NPE when saxon:assign refers to an undeclared variable
- Category set to Saxon extensions
- Assignee set to Michael Kay
- Priority changed from Low to Normal
- Applies to branch 9.7 added
In fact it can be reproduced with the even simpler:
<xsl:template name="formatStringByToken" as="text()*">
<saxon:assign name="remain" select="2"/>
</xsl:template>
where $remain is undeclared.
Updated by Michael Kay almost 9 years ago
- Status changed from New to Resolved
- Fix Committed on Branch 9.6, 9.7 added
Patch committed on the 9.6 and 9.7 branches.
The NPE occurred while trying to construct the error message saying the variable was undeclared.
Updated by Radu Coravu almost 9 years ago
Thanks Michael, I stumbled over it when trying to (unsuccessfully) reduce out client's stylesheets which trigger another exception when compiled with optimizations enabled:
java.lang.IllegalArgumentException: Invalid replacement
at net.sf.saxon.expr.Expression.replaceOperand(Expression.java:1010)
at net.sf.saxon.expr.parser.ExpressionTool.inlineVariableReferences(ExpressionTool.java:1300)
at net.sf.saxon.expr.parser.ExpressionTool.inlineVariableReferences(ExpressionTool.java:1303)
at net.sf.saxon.expr.Assignation.replaceVariable(Assignation.java:470)
at net.sf.saxon.expr.LetExpression.optimize(LetExpression.java:231)
at net.sf.saxon.expr.parser.ExpressionVisitor.optimize(ExpressionVisitor.java:244)
at net.sf.saxon.expr.instruct.Block.optimize(Block.java:582)
at net.sf.saxon.expr.parser.ExpressionVisitor.optimize(ExpressionVisitor.java:244)
at net.sf.saxon.style.XSLTemplate.optimize(XSLTemplate.java:611)
at net.sf.saxon.style.StylesheetPackage.optimizeTopLevel(StylesheetPackage.java:1256)
at net.sf.saxon.style.StylesheetPackage.compile(StylesheetPackage.java:1123)
at net.sf.saxon.style.Compilation.compilePackage(Compilation.java:201)
at net.sf.saxon.style.Compilation.compileSingletonPackage(Compilation.java:94)
at net.sf.saxon.s9api.XsltCompiler.compile(XsltCompiler.java:543)
at net.sf.saxon.jaxp.SaxonTransformerFactory.newTemplates(SaxonTransformerFactory.java:175)
at net.sf.saxon.jaxp.SaxonTransformerFactory.newTransformer(SaxonTransformerFactory.java:129)
but we'll try to convince our client to add an issue and provide you with all the stylesheets. By the way, in such cases when applying the optimizations results in errors, maybe you could fall back and avoid any optimization.
Updated by O'Neil Delpratt almost 9 years ago
- % Done changed from 0 to 100
- Fixed in Maintenance Release 9.7.0.2 added
Bug fix applied in the Saxon 9.7.0.2 maintenance release
Updated by O'Neil Delpratt almost 9 years ago
- Fixed in Maintenance Release 9.7.0.3 added
- Fixed in Maintenance Release deleted (
9.7.0.2)
Bug fix applied in the 9.7.0.3 maintenance release. Leave open until fix applied in the 9.6 branch
Updated by O'Neil Delpratt over 8 years ago
- Status changed from Resolved to Closed
- Fixed in Maintenance Release 9.6.0.9 added
- Fixed in Maintenance Release deleted (
9.7.0.3)
Bug fix applied in the Saxon 9.6.0.9 maintenance release.
Updated by O'Neil Delpratt over 8 years ago
- Fixed in Maintenance Release 9.7.0.3 added
Please register to edit this issue