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
+}