Author: olli
Date: Sat Jan  2 19:44:20 2016
New Revision: 1722655

URL: http://svn.apache.org/viewvc?rev=1722655&view=rev
Log:
SLING-5361 Plain string expressions shouldn't be evaluated

patch from Nicolas Peltier

Modified:
    sling/trunk/contrib/extensions/sling-pipes/pom.xml
    
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/pom.xml
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/pom.xml?rev=1722655&r1=1722654&r2=1722655&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/sling-pipes/pom.xml (original)
+++ sling/trunk/contrib/extensions/sling-pipes/pom.xml Sat Jan  2 19:44:20 2016
@@ -28,7 +28,7 @@
     <modelVersion>4.0.0</modelVersion>
     <artifactId>org.apache.sling.pipes</artifactId>
     <packaging>bundle</packaging>
-    <version>0.0.8-SNAPSHOT</version>
+    <version>0.0.9-SNAPSHOT</version>
 
     <name>Apache Sling Pipes</name>
     <description>bulk content changes tool</description>

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=1722655&r1=1722654&r2=1722655&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
 Sat Jan  2 19:44:20 2016
@@ -161,29 +161,32 @@ public class PipeBindings {
      * @return
      */
     protected String computeECMA5Expression(String expr){
-        StringBuilder expression = new StringBuilder();
         Matcher matcher = INJECTED_SCRIPT.matcher(expr);
-        int start = 0;
-        while (matcher.find()){
-            if (matcher.start() > start){
-                if (expression.length() == 0){
-                    expression.append("'");
+        if (INJECTED_SCRIPT.matcher(expr).find()) {
+            StringBuilder expression = new StringBuilder();
+            int start = 0;
+            while (matcher.find()) {
+                if (matcher.start() > start) {
+                    if (expression.length() == 0) {
+                        expression.append("'");
+                    }
+                    expression.append(expr.substring(start, matcher.start()));
+                }
+                if (expression.length() > 0) {
+                    expression.append("' + ");
+                }
+                expression.append(matcher.group(1));
+                start = matcher.end();
+                if (start < expr.length()) {
+                    expression.append(" + '");
                 }
-                expression.append(expr.substring(start,matcher.start()));
-            }
-            if (expression.length() > 0){
-                expression.append("' + ");
             }
-            expression.append(matcher.group(1));
-            start = matcher.end();
-            if (start < expr.length()){
-                expression.append(" + '");
+            if (start < expr.length()) {
+                expression.append(expr.substring(start) + "'");
             }
+            return expression.toString();
         }
-        if (start < expr.length()){
-             expression.append(expr.substring(start) + "'");
-        }
-        return expression.toString();
+        return null;
     }
 
     /**
@@ -192,8 +195,13 @@ public class PipeBindings {
      * @return
      * @throws ScriptException
      */
-    private Object evaluate(String expr) throws ScriptException {
-        return engine.eval(computeECMA5Expression(expr), scriptContext);
+    protected Object evaluate(String expr) throws ScriptException {
+        String computed = computeECMA5Expression(expr);
+        if (computed != null){
+            //computed is null in case expr is a simple string
+            return engine.eval(computed, scriptContext);
+        }
+        return expr;
     }
 
     /**

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=1722655&r1=1722654&r2=1722655&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
 Sat Jan  2 19:44:20 2016
@@ -26,6 +26,8 @@ import java.util.Map;
 
 import static org.junit.Assert.*;
 
+import javax.script.ScriptException;
+
 /**
  * testing binding's expressions instanciations
  */
@@ -40,6 +42,15 @@ public class PipeBindingsTest extends Ab
     }
 
     @Test
+    public void testEvaluateSimpleString() throws ScriptException {
+        Resource resource = context.resourceResolver().getResource(PATH_PIPE + 
"/" + ContainerPipeTest.NN_DUMMYTREE);
+        PipeBindings bindings = new PipeBindings(resource);
+        String simple = "simple string";
+        String evaluated = (String)bindings.evaluate(simple);
+        assertEquals("evaluated should be the same than input", evaluated, 
simple);
+    }
+
+    @Test
     public void computeEcma5Expression() {
         Resource resource = context.resourceResolver().getResource(PATH_PIPE + 
"/" + ContainerPipeTest.NN_DUMMYTREE);
         PipeBindings bindings = new PipeBindings(resource);
@@ -100,4 +111,4 @@ public class PipeBindingsTest extends Ab
         Number expression = 
(Number)bindings.instantiateObject("${testSumFunction(1,2)}");
         assertEquals("computed expression have testSum script's 
functionavailable", 3, expression.intValue());
     }
-}
\ No newline at end of file
+}


Reply via email to