Repository: wicket
Updated Branches:
  refs/heads/master f8c873676 -> aeeff0988


[WICKET-6533] Unicode non-characters are skipped


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/b85f5c02
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/b85f5c02
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/b85f5c02

Branch: refs/heads/master
Commit: b85f5c0202439b404028470883f8353a44a2e034
Parents: c544488
Author: Maxim Solodovnik <[email protected]>
Authored: Thu Mar 29 00:47:08 2018 +0700
Committer: Maxim Solodovnik <[email protected]>
Committed: Thu Mar 29 00:47:08 2018 +0700

----------------------------------------------------------------------
 .../org/apache/wicket/util/string/Strings.java  | 24 ++++++++++++++++++++
 .../apache/wicket/util/string/StringsTest.java  |  7 ++++++
 2 files changed, 31 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/b85f5c02/wicket-util/src/main/java/org/apache/wicket/util/string/Strings.java
----------------------------------------------------------------------
diff --git 
a/wicket-util/src/main/java/org/apache/wicket/util/string/Strings.java 
b/wicket-util/src/main/java/org/apache/wicket/util/string/Strings.java
index 58475d4..9d6537b 100755
--- a/wicket-util/src/main/java/org/apache/wicket/util/string/Strings.java
+++ b/wicket-util/src/main/java/org/apache/wicket/util/string/Strings.java
@@ -21,8 +21,11 @@ import java.nio.charset.Charset;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Locale;
+import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -59,6 +62,19 @@ public final class Strings
        /** A table of hex digits */
        private static final char[] HEX_DIGIT = { '0', '1', '2', '3', '4', '5', 
'6', '7', '8', '9',
                        'A', 'B', 'C', 'D', 'E', 'F' };
+       private static final Set<Character> NONCHARACTERS = 
Collections.unmodifiableSet(new HashSet<Character>()
+       {
+               private static final long serialVersionUID = 1L;
+
+               {
+                       for (int i = 0x0000FDD0; i <= 0x0000FDEF; ++i)
+                       {
+                               add((char)i);
+                       }
+                       add((char)0x0000FFFE);
+                       // all other non-characters are out of range of (char)
+               }
+       });
 
        private static final Pattern HTML_NUMBER_REGEX = 
Pattern.compile("&#\\d+;");
        
@@ -320,6 +336,10 @@ public final class Strings
                {
                        final char c = s.charAt(i);
 
+                       if (NONCHARACTERS.contains(c))
+                       {
+                               continue;
+                       }
                        switch (c)
                        {
                                case '\t' :
@@ -1010,6 +1030,10 @@ public final class Strings
                for (int x = 0; x < len; x++)
                {
                        char aChar = unicodeString.charAt(x);
+                       if (NONCHARACTERS.contains(aChar))
+                       {
+                               continue;
+                       }
                        // Handle common case first, selecting largest block 
that
                        // avoids the specials below
                        if ((aChar > 61) && (aChar < 127))

http://git-wip-us.apache.org/repos/asf/wicket/blob/b85f5c02/wicket-util/src/test/java/org/apache/wicket/util/string/StringsTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-util/src/test/java/org/apache/wicket/util/string/StringsTest.java 
b/wicket-util/src/test/java/org/apache/wicket/util/string/StringsTest.java
index 8f82a7a..da12cb1 100644
--- a/wicket-util/src/test/java/org/apache/wicket/util/string/StringsTest.java
+++ b/wicket-util/src/test/java/org/apache/wicket/util/string/StringsTest.java
@@ -441,4 +441,11 @@ public class StringsTest
                // empty separator
                assertEquals("foobarbaz", Strings.join("", fragments));
        }
+
+       @Test
+       public void testNonchar()
+       {
+               assertEquals("", 
Strings.escapeMarkup("\ufffe\uffff\uFDDF\uFDE0").toString());
+               assertEquals("", 
Strings.toEscapedUnicode("\ufffe\uffff\uFDDF\uFDE0"));
+       }
 }

Reply via email to