Author: rombert
Date: Fri Jan 15 15:29:37 2016
New Revision: 1724841

URL: http://svn.apache.org/viewvc?rev=1724841&view=rev
Log:
SLING-5431 - PipeBinding NPE when evaluating null expression

Submitted-By: Nicolas Peltier

Modified:
    
sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/PipeBindings.java
    
sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/PipeBindingsTest.java

Modified: 
sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/PipeBindings.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/PipeBindings.java?rev=1724841&r1=1724840&r2=1724841&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/PipeBindings.java
 (original)
+++ 
sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/PipeBindings.java
 Fri Jan 15 15:29:37 2016
@@ -227,7 +227,7 @@ public class PipeBindings {
     public Object instantiateObject(String expr){
         try {
             Object result = evaluate(expr);
-            if (! result.getClass().getName().startsWith("java.lang.")) {
+            if (result != null && ! 
result.getClass().getName().startsWith("java.lang.")) {
                 //special case of the date in which case 
jdk.nashorn.api.scripting.ScriptObjectMirror will
                 //be returned
                 JsDate jsDate = ((Invocable) engine).getInterface(result, 
JsDate.class);

Modified: 
sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/PipeBindingsTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/PipeBindingsTest.java?rev=1724841&r1=1724840&r2=1724841&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/PipeBindingsTest.java
 (original)
+++ 
sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/PipeBindingsTest.java
 Fri Jan 15 15:29:37 2016
@@ -41,10 +41,14 @@ public class PipeBindingsTest extends Ab
         context.load().json("/container.json", PATH_PIPE);
     }
 
+    private PipeBindings getDummyTreeBinding(){
+        Resource resource = context.resourceResolver().getResource(PATH_PIPE + 
"/" + ContainerPipeTest.NN_DUMMYTREE);
+        return new PipeBindings(resource);
+    }
+
     @Test
     public void testEvaluateSimpleString() throws ScriptException {
-        Resource resource = context.resourceResolver().getResource(PATH_PIPE + 
"/" + ContainerPipeTest.NN_DUMMYTREE);
-        PipeBindings bindings = new PipeBindings(resource);
+        PipeBindings bindings = getDummyTreeBinding();
         String simple = "simple string";
         String evaluated = (String)bindings.evaluate(simple);
         assertEquals("evaluated should be the same than input", evaluated, 
simple);
@@ -52,8 +56,7 @@ public class PipeBindingsTest extends Ab
 
     @Test
     public void computeEcma5Expression() {
-        Resource resource = context.resourceResolver().getResource(PATH_PIPE + 
"/" + ContainerPipeTest.NN_DUMMYTREE);
-        PipeBindings bindings = new PipeBindings(resource);
+        PipeBindings bindings = getDummyTreeBinding();
         Map<String,String> expressions = new HashMap<>();
         expressions.put("blah ${blah} blah", "'blah ' + blah + ' blah'");
         expressions.put("${blah}", "blah");
@@ -68,8 +71,7 @@ public class PipeBindingsTest extends Ab
 
     @Test
     public void testInstantiateExpression() throws Exception {
-        Resource resource = context.resourceResolver().getResource(PATH_PIPE + 
"/" + ContainerPipeTest.NN_DUMMYTREE);
-        PipeBindings bindings = new PipeBindings(resource);
+        PipeBindings bindings = getDummyTreeBinding();
         Map<String, String> testMap = new HashMap<>();
         testMap.put("a", "apricots");
         testMap.put("b", "bananas");
@@ -79,9 +81,15 @@ public class PipeBindingsTest extends Ab
     }
 
     @Test
+    public void testEvaluateNull() throws Exception {
+        PipeBindings bindings = getDummyTreeBinding();
+        assertNull("${null} object should be instantiated as null", 
bindings.instantiateObject("${null}"));
+        assertNull("${null} expression should be instantiated as null", 
bindings.instantiateExpression("${null}"));
+    }
+
+    @Test
     public void testInstantiateObject() throws Exception {
-        Resource resource = context.resourceResolver().getResource(PATH_PIPE + 
"/" + ContainerPipeTest.NN_DUMMYTREE);
-        PipeBindings bindings = new PipeBindings(resource);
+        PipeBindings bindings = getDummyTreeBinding();
         Map<String, String> testMap = new HashMap<>();
         testMap.put("a", "apricots");
         testMap.put("b", "bananas");


Reply via email to