From d64d45d8e6066dc88f98d3692075124c36b34960 Mon Sep 17 00:00:00 2001 From: ryounes Date: Wed, 20 Apr 2011 21:37:12 +0000 Subject: [PATCH] NIHVIVO-2470 Restore parameter type checking on DumpDirective and HelpDirective. Handle undefined variables by assigning value = "Undefined." --- .../src/freemarker/ext/dump/BaseDumpDirective.java | 4 +--- webapp/src/freemarker/ext/dump/DumpDirective.java | 14 +++++++++++++- webapp/src/freemarker/ext/dump/HelpDirective.java | 9 +++++++-- .../freemarker/ext/dump/DumpDirectiveTest.java | 1 - 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/webapp/src/freemarker/ext/dump/BaseDumpDirective.java b/webapp/src/freemarker/ext/dump/BaseDumpDirective.java index b2849bc08..5c33cf75b 100644 --- a/webapp/src/freemarker/ext/dump/BaseDumpDirective.java +++ b/webapp/src/freemarker/ext/dump/BaseDumpDirective.java @@ -83,8 +83,7 @@ public abstract class BaseDumpDirective implements TemplateDirectiveModel { METHOD("Method"), NUMBER("Number"), SEQUENCE("Sequence"), - STRING("String"), - UNDEFINED("Undefined"); + STRING("String"); private final String type; @@ -128,7 +127,6 @@ public abstract class BaseDumpDirective implements TemplateDirectiveModel { Map value = new HashMap(); if (model == null) { - value.put(Key.TYPE.toString(), Type.UNDEFINED); value.put(Key.VALUE.toString(), VALUE_UNDEFINED); // TemplateMethodModel and TemplateDirectiveModel objects can only be diff --git a/webapp/src/freemarker/ext/dump/DumpDirective.java b/webapp/src/freemarker/ext/dump/DumpDirective.java index cb0e51704..c4cf36517 100644 --- a/webapp/src/freemarker/ext/dump/DumpDirective.java +++ b/webapp/src/freemarker/ext/dump/DumpDirective.java @@ -37,7 +37,19 @@ public class DumpDirective extends BaseDumpDirective { "The dump directive doesn't allow nested content."); } - String varName = params.get("var").toString(); + Object o = params.get("var"); + + if ( o == null) { + throw new TemplateModelException( + "Must specify 'var' argument."); + } + + if ( !(o instanceof SimpleScalar)) { + throw new TemplateModelException( + "Value of parameter 'var' must be a string."); + } + + String varName = o.toString(); //((SimpleScalar)o).getAsString(); Map map = getTemplateVariableDump(varName, env); dump(TEMPLATE_DEFAULT, map, env); diff --git a/webapp/src/freemarker/ext/dump/HelpDirective.java b/webapp/src/freemarker/ext/dump/HelpDirective.java index 581d22a8d..1fb22d633 100644 --- a/webapp/src/freemarker/ext/dump/HelpDirective.java +++ b/webapp/src/freemarker/ext/dump/HelpDirective.java @@ -40,8 +40,13 @@ public class HelpDirective extends BaseDumpDirective { throw new TemplateModelException( "Must specify 'for' argument."); } - - String varName = params.get("var").toString(); + + if ( !(o instanceof SimpleScalar)) { + throw new TemplateModelException( + "Value of parameter 'for' must be a string."); + } + + String varName = o.toString(); //((SimpleScalar)o).getAsString(); TemplateHashModel dataModel = env.getDataModel(); Object templateModel = dataModel.get(varName); diff --git a/webapp/test/freemarker/ext/dump/DumpDirectiveTest.java b/webapp/test/freemarker/ext/dump/DumpDirectiveTest.java index 2d6fd9149..f51c043a6 100644 --- a/webapp/test/freemarker/ext/dump/DumpDirectiveTest.java +++ b/webapp/test/freemarker/ext/dump/DumpDirectiveTest.java @@ -78,7 +78,6 @@ public class DumpDirectiveTest { Map dataModel = new HashMap(); Map expectedDumpValue = new HashMap(); - expectedDumpValue.put(Key.TYPE.toString(), Type.UNDEFINED); expectedDumpValue.put(Key.VALUE.toString(), BaseDumpDirective.VALUE_UNDEFINED); Map expectedDump = new HashMap();