Re: Detect invalid directives
Daniel Dekany <[email protected]>
| Newsgroups | gmane.comp.web.freemarker.user |
|---|---|
| Message-ID | <[email protected]> |
Wednesday, October 19, 2011, 2:11:51 PM, John Todd wrote:
> On 10/19/11 04:29, Daniel Dekany wrote:
>> Wednesday, October 19, 2011, 5:55:18 AM, John Todd wrote:
>>
>>> Hello,
>>>
>>> I would like to handle invalid directives however they are just
>>> passing through the templating engine as text, e.g. using the following
>>> FTL "blah.ftl":
>>>
>>> This is [#blah]content[/#blah]. This is [#fu] content.
>> That's not possible, unless you pre-process the templates with a
>> custom TemplateLoader that replaces "[#blah]" with "[[#-- --]#blah]"
>> or like.
>>
>> Out of curiosity, why do you need this?
> We use the templating engine extensively for on-demand personalization
> of content and would like to reject templating requests at the time the
> template is passed to our system if the template contains unknown
> directives and just reject the request.
>
> So, you're saying it's not possible to catch such exceptions or the
> behavior I'm seeing is not possible?
Sorry, I was hasty and misread your question. FreeMarker should throw
exception for invalid # tags always and everywhere. However, now that
I have tried this, it seems it bypasses the # tags until it finds one
that it knows. It's astonishing that I have never ran into this bug
myself, and it's quite concerning that the author didn't have a test
case that catches this. I suppose it slipped in when tag-syntax
detection was added. It can't be straight fixed in 2.3.x as it would
be non-BC, except by adding some new option. The workaround for this
right now is starting all templates with [#ftl]...
> thx,
> jt
>
>>> and the code:
>>>
>>> public class App {
>>>
>>> public static void main(String[] args) throws Exception {
>>> Configuration cfg = new Configuration();
>>> cfg.setTagSyntax(Configuration.SQUARE_BRACKET_TAG_SYNTAX);
>>>
>>> cfg.setDirectoryForTemplateLoading(new
>>> File(System.getProperty("user.dir")));
>>>
>>> System.out.println("Compiling template: blah.ftl");
>>> FileReader reader = new
>>> FileReader(System.getProperty("user.dir") + "/blah.ftl");
>>> // Expect ParseException
>>> Template template = new Template("blah.ftl", reader, cfg);
>>>
>>> System.out.println("Getting template from Configuration.");
>>> // Also expect ParseException
>>> template = cfg.getTemplate("blah.ftl");
>>> StringWriter writer = new StringWriter();
>>> template.process(new HashMap(), writer);
>>> System.out.println("Output: " + writer.toString());
>>> }
>>> }
>>>
>>> I get the output:
>>>
>>> This is [#blah]content[/#blah]. This is [#fu] content.
>>>
>>> In each Template reference, I'm expecting a compilation error w/
>>> "Unknown directive" per the FMParser.jj grammar. Any suggestions?
>>>
>>> Thanks,
>>>
>>> John T.
>
>
> ------------------------------------------------------------------------------
> All the data continuously generated in your IT infrastructure contains a
> definitive record of customers, application performance, security
> threats, fraudulent activity and more. Splunk takes this data and makes
> sense of it. Business sense. IT sense. Common sense.
> http://p.sf.net/sfu/splunk-d2d-oct
> _______________________________________________
> FreeMarker-user mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/freemarker-user
>
--
Best regards,
Daniel Dekany
------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2d-oct