SLING-5944 - Sightly doesn't allow to overwrite the context for `data-sly-element`
* skip applying elementContext if the expression is an XSS RuntimeCall already
* updated TCK to 1.2.4 which provides a test for data-sly-element with context set
to unsafe
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1756915 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/ElementPlugin.java b/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/ElementPlugin.java
index 422b48f..89de6a2 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/ElementPlugin.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/ElementPlugin.java
@@ -18,14 +18,16 @@
******************************************************************************/
package org.apache.sling.scripting.sightly.impl.plugin;
+import org.apache.sling.scripting.sightly.compiler.RuntimeFunction;
import org.apache.sling.scripting.sightly.compiler.commands.Conditional;
import org.apache.sling.scripting.sightly.compiler.commands.OutText;
import org.apache.sling.scripting.sightly.compiler.commands.OutputVariable;
import org.apache.sling.scripting.sightly.compiler.commands.VariableBinding;
-import org.apache.sling.scripting.sightly.compiler.expression.MarkupContext;
-import org.apache.sling.scripting.sightly.impl.compiler.PushStream;
import org.apache.sling.scripting.sightly.compiler.expression.Expression;
import org.apache.sling.scripting.sightly.compiler.expression.ExpressionNode;
+import org.apache.sling.scripting.sightly.compiler.expression.MarkupContext;
+import org.apache.sling.scripting.sightly.compiler.expression.nodes.RuntimeCall;
+import org.apache.sling.scripting.sightly.impl.compiler.PushStream;
import org.apache.sling.scripting.sightly.impl.compiler.frontend.CompilerContext;
import org.apache.sling.scripting.sightly.impl.filter.ExpressionContext;
@@ -40,7 +42,7 @@
return new DefaultPluginInvoke() {
- private final ExpressionNode node = compilerContext.adjustToContext(expression, MarkupContext.ELEMENT_NAME, ExpressionContext
+ private final ExpressionNode node = adjustContext(compilerContext, expression, MarkupContext.ELEMENT_NAME, ExpressionContext
.ELEMENT).getRoot();
private String tagVar = compilerContext.generateVariable("tagVar");
@@ -87,4 +89,16 @@
};
}
+
+ private Expression adjustContext(CompilerContext compilerContext, Expression expression, MarkupContext markupContext,
+ ExpressionContext expressionContext) {
+ ExpressionNode root = expression.getRoot();
+ if (root instanceof RuntimeCall) {
+ RuntimeCall runtimeCall = (RuntimeCall) root;
+ if (runtimeCall.getFunctionName().equals(RuntimeFunction.XSS)) {
+ return expression;
+ }
+ }
+ return compilerContext.adjustToContext(expression, markupContext, expressionContext);
+ }
}