[ 
https://issues.apache.org/jira/browse/VELOCITY-717?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12858926#action_12858926
 ] 

Jarkko Viinamäki commented on VELOCITY-717:
-------------------------------------------

OK. I tracked down this bug. It happens in 1.6.2 but not in 1.7 (current head). 
To reproduce the bug is required that Velocity.VM_PERM_INLINE_LOCAL is set to 
true. Otherwise it doesn't happen as "namespaces" aren't enabled. See the 
attached testcase.

The Parse directive is implemented differently in 1.7 (Is the behaviour still 
the same?) and it avoids this bug.

The reason for this NPE is of course that the namespace parameter passed to 
VelocimacroManager.get is null. This eventually causes a call to Hashtable.get 
with a null key -> NPE.

The bug is in runtime.directive.Parse:

line 158: String arg = EventHandlerUtil.includeEvent( rsvc, context, sourcearg, 
context.getCurrentTemplateName(), getName());

// now arg can be null if IncludeEventHandler returns null

// then later in the same method

line 254: macroLibraries.add(arg);

Now the macroLibraries within the Context is "poisoned" by a null value. Then 
when we try to render some macro in runtime.directive.RuntimeMacro:

line 218: o = rsvc.getVelocimacro(macroName,
                            (String)macroLibraries.get(i), renderingTemplate);

Here macroLibraries.get(i) returns null and passes it to VelocimacroManager 
(namespace = null) and BOOM. 



> Engine throws an NPE using custom macro libs if the IncludeEventHandler 
> returns null
> ------------------------------------------------------------------------------------
>
>                 Key: VELOCITY-717
>                 URL: https://issues.apache.org/jira/browse/VELOCITY-717
>             Project: Velocity
>          Issue Type: Bug
>          Components: Engine
>    Affects Versions: 1.6.2
>         Environment: Suse Linux
>            Reporter: Johann Weber
>            Assignee: Will Glass-Husain
>            Priority: Critical
>             Fix For: 1.7
>
>         Attachments: macros2.vm, test8.vm, Velocity717TestCase.java
>
>
> The Engine throws an NPE if the IncludeEventHandler returns null.
> (using merge method with a list of macro libs)
>  java.lang.NullPointerException
> >>        at java.util.Hashtable.get(Hashtable.java:333)
> >>        at 
> >> org.apache.velocity.runtime.VelocimacroManager.getNamespace(VelocimacroManager.java:318)
> >>        at 
> >> org.apache.velocity.runtime.VelocimacroManager.get(VelocimacroManager.java:215)
> >>        at 
> >> org.apache.velocity.runtime.VelocimacroFactory.getVelocimacro(VelocimacroFactory.java:563)
> >>        at 
> >> org.apache.velocity.runtime.RuntimeInstance.getVelocimacro(RuntimeInstance.java:1563)
> >>        at 
> >> org.apache.velocity.runtime.directive.RuntimeMacro.render(RuntimeMacro.java:218)
> >>        at 
> >> org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:175)
> >>        at 
> >> org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336)
> >>        at 
> >> org.apache.velocity.runtime.directive.Parse.render(Parse.java:260)
> >>        at 
> >> org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:175)
> >>        at 
> >> org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336)
> >>        at org.apache.velocity.Template.merge(Template.java:328)

-- 
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]

Reply via email to