You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2019/07/01 12:29:52 UTC
[wicket] branch wicket-8.x updated: WICKET-6680 Identify javascript
template literals to prevent stripping too mamy characters
This is an automated email from the ASF dual-hosted git repository.
mgrigorov pushed a commit to branch wicket-8.x
in repository https://gitbox.apache.org/repos/asf/wicket.git
The following commit(s) were added to refs/heads/wicket-8.x by this push:
new 6d11cb6 WICKET-6680 Identify javascript template literals to prevent stripping too mamy characters
6d11cb6 is described below
commit 6d11cb6e8dd138d23111c7d54ae6b48bb87006df
Author: Arthur Bogaart <a....@onehippo.com>
AuthorDate: Mon Jul 1 14:26:50 2019 +0200
WICKET-6680 Identify javascript template literals to prevent stripping too mamy characters
(cherry picked from commit 1e42bb3ba689b3c1584b5b57f6e72211d2978934)
---
.../wicket/core/util/string/JavaScriptStripper.java | 17 +++++++++++++++++
.../wicket/util/string/JavaScriptStripperTest.java | 12 +++++++++++-
2 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/util/string/JavaScriptStripper.java b/wicket-core/src/main/java/org/apache/wicket/core/util/string/JavaScriptStripper.java
index 46988d6..bb57ce7 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/util/string/JavaScriptStripper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/util/string/JavaScriptStripper.java
@@ -50,6 +50,9 @@ public class JavaScriptStripper
/** Inside a regular expression */
private final static int REG_EXP = 7;
+ /** Inside a template literal */
+ private final static int TEMPLATE_LITERAL = 8;
+
private int getPrevCount(String s, int fromIndex, char c)
{
int count = 0;
@@ -164,6 +167,10 @@ public class JavaScriptStripper
{
state = STRING_DOUBLE_QUOTES;
}
+ else if (c == '`')
+ {
+ state = TEMPLATE_LITERAL;
+ }
result.append(c);
continue;
}
@@ -222,6 +229,16 @@ public class JavaScriptStripper
}
result.append(c);
}
+
+ if (state == TEMPLATE_LITERAL) {
+ // to leave a template literal expression we need even (or zero) number of backslashes
+ int count = getPrevCount(original, i, '\\');
+ if (c == '`' && count % 2 == 0) {
+ state = REGULAR_TEXT;
+ }
+ result.append(c);
+ continue;
+ }
}
return result.toString();
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/string/JavaScriptStripperTest.java b/wicket-core/src/test/java/org/apache/wicket/util/string/JavaScriptStripperTest.java
index 1ffe164..cd604fc 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/string/JavaScriptStripperTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/util/string/JavaScriptStripperTest.java
@@ -22,7 +22,7 @@ import org.junit.Test;
/**
* Tests {@link JavaScriptStripper}
- *
+ *
* @author <a href="mailto:jbq@apache.org">Jean-Baptiste Quenot</a>
*/
public class JavaScriptStripperTest extends Assert
@@ -168,4 +168,14 @@ public class JavaScriptStripperTest extends Assert
System.out.println(result);
}
+ /** https://issues.apache.org/jira/browse/WICKET-6680 */
+ @Test
+ void templateLiteralWithTwoForwardSlashes() {
+ final String before = "const url = `${protocol}//${hostname}:${port}`;";
+ final String after = new JavaScriptStripper().stripCommentsAndWhitespace(before);
+
+ assertEquals(before, after);
+ }
+
+
}