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")); + } }
