Re: Detect invalid directives

Daniel Dekany <[email protected]>
Newsgroups gmane.comp.web.freemarker.user
Message-ID <[email protected]>
Wednesday, October 19, 2011, 6:11:33 PM, John R. Todd wrote:

> On 10/19/11 09:36, Denis Bredelet wrote:
>> On 19 Oct 2011, at 14:46, Daniel Dekany<[email protected]>  wrote:
>>
>>> 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]...
>> Is this only for the square bracket syntax? It makes sense to start the template with [#ftl] anyway, instead of relying on auto-detection...
>
> I see the same behaviour whether it's using the square or angle bracket
> syntax.  But the [#ftl] does generate the expected parse exception.

Or if you check out

  https://freemarker.svn.sourceforge.net/svnroot/freemarker/branches/2.3/freemarker

and build it with ant (sorry, the nightly builder site seems to be
down ATM), and then use

  cfg.setEmulate23ParserBugs(false);

it should work correctly even without [#ftl]. (The more people test it
the better...)

-- 
Best regards,
 Daniel Dekany


> thx,
> jt
>> -- Denis.
>>
>>>> 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
>
>
> ------------------------------------------------------------------------------
> 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
>


------------------------------------------------------------------------------
The demand for IT networking professionals continues to grow, and the
demand for specialized networking skills is growing even more rapidly.
Take a complimentary Learning@Ciosco Self-Assessment and learn 
about Cisco certifications, training, and career opportunities. 
http://p.sf.net/sfu/cisco-dev2dev
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.