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:26:55 UTC

[wicket] branch master updated: Identify javascript template literals to prevent stripping too m… (#372)

This is an automated email from the ASF dual-hosted git repository.

mgrigorov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git


The following commit(s) were added to refs/heads/master by this push:
     new 1e42bb3  Identify javascript template literals to prevent stripping too m… (#372)
1e42bb3 is described below

commit 1e42bb3ba689b3c1584b5b57f6e72211d2978934
Author: Arthur Bogaart <a....@onehippo.com>
AuthorDate: Mon Jul 1 14:26:50 2019 +0200

    Identify javascript template literals to prevent stripping too m… (#372)
---
 .../wicket/core/util/string/JavaScriptStripper.java    | 17 +++++++++++++++++
 .../wicket/util/string/JavaScriptStripperTest.java     | 18 ++++++++++++++----
 2 files changed, 31 insertions(+), 4 deletions(-)

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 adf1417..d928cc6 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
@@ -16,16 +16,16 @@
  */
 package org.apache.wicket.util.string;
 
+import org.apache.wicket.core.util.string.JavaScriptStripper;
+import org.junit.jupiter.api.Test;
+
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import org.apache.wicket.core.util.string.JavaScriptStripper;
-import org.junit.jupiter.api.Test;
-
 /**
  * Tests {@link JavaScriptStripper}
- * 
+ *
  * @author <a href="mailto:jbq@apache.org">Jean-Baptiste Quenot</a>
  */
 class JavaScriptStripperTest
@@ -171,4 +171,14 @@ class JavaScriptStripperTest
 		System.out.println(result);
 	}
 
+	/**	*/
+	@Test
+	void templateLiteralWithTwoForwardSlashes() {
+		final String before = "const url = `${protocol}//${hostname}:${port}`;";
+		final String after = new JavaScriptStripper().stripCommentsAndWhitespace(before);
+
+		assertEquals(before, after);
+	}
+
+
 }