You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by hn...@apache.org on 2018/04/19 10:10:09 UTC

[myfaces-tobago] branch master updated: TOBAGO-1891 Allow only numbers and alphabetic characters for markups

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

hnoeth pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git


The following commit(s) were added to refs/heads/master by this push:
     new 45bc077  TOBAGO-1891 Allow only numbers and alphabetic characters for markups
45bc077 is described below

commit 45bc077be87110f1add118185ba9f2545d311484
Author: Henning Noeth <hn...@apache.org>
AuthorDate: Thu Apr 19 12:10:03 2018 +0200

    TOBAGO-1891 Allow only numbers and alphabetic characters for markups
    
    * markups can now only have numeric and alphabetic characters
    * if a special character is detected a warning is logged
    * added some markup unit test
---
 .../org/apache/myfaces/tobago/context/Markup.java  | 44 +++++++++++++++++++---
 .../myfaces/tobago/context/MarkupUnitTest.java     |  6 +++
 2 files changed, 44 insertions(+), 6 deletions(-)

diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/context/Markup.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/context/Markup.java
index 5b4b5d3..0f05db0 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/context/Markup.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/context/Markup.java
@@ -21,6 +21,8 @@ package org.apache.myfaces.tobago.context;
 
 import org.apache.myfaces.tobago.internal.util.ArrayUtils;
 import org.apache.myfaces.tobago.internal.util.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.Serializable;
 import java.util.ArrayList;
@@ -54,6 +56,8 @@ import java.util.List;
  */
 public final class Markup implements Serializable, Iterable<String> {
 
+  private static final Logger LOG = LoggerFactory.getLogger(Markup.class);
+
   public static final Markup NULL = new Markup((String) null);
 
   public static final Markup ASCENDING = valueOf("ascending");
@@ -222,13 +226,41 @@ public final class Markup implements Serializable, Iterable<String> {
   private final String value;
 
   private Markup(final String[] values) {
-    this.values = values;
+    this.values = values != null ? filterSpecialChars(values) : null;
     this.value = null;
   }
 
   private Markup(final String value) {
     this.values = null;
-    this.value = value;
+    this.value = value != null ? filterSpecialChars(value) : null;
+  }
+
+  private String[] filterSpecialChars(final String[] values) {
+    for (int i = 0; i < values.length; i++) {
+      values[i] = filterSpecialChars(values[i]);
+    }
+    return values;
+  }
+
+  private String filterSpecialChars(String value) {
+    StringBuilder stringBuilder = new StringBuilder(value.length());
+    boolean forbiddenCharFound = false;
+    for (int i = 0; i < value.length(); i++) {
+      final char c = value.charAt(i);
+      if (('0' <= c && c <= '9') || ('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z')) {
+        stringBuilder.append(c);
+      } else {
+        forbiddenCharFound = true;
+      }
+    }
+    if (forbiddenCharFound) {
+      final String newValue = stringBuilder.toString();
+      LOG.warn("Only numeric and alphabetic characters are allowed for markups: '{}' converted to '{}'.", value,
+          newValue);
+      return newValue;
+    } else {
+      return value;
+    }
   }
 
   public static Markup valueOf(final String[] values) {
@@ -237,11 +269,11 @@ public final class Markup implements Serializable, Iterable<String> {
     } else if (values.length == 1) {
       return valueOf(values[0]);
     } else {
-      final Markup markup = new Markup(values.clone());
-      for (int i = 0; i < markup.values.length; i++) {
-        markup.values[i] = markup.values[i].trim();
+      final String[] clonedValues = values.clone();
+      for (int i = 0; i < clonedValues.length; i++) {
+        clonedValues[i] = clonedValues[i].trim();
       }
-      return markup;
+      return new Markup(clonedValues);
     }
   }
 
diff --git a/tobago-core/src/test/java/org/apache/myfaces/tobago/context/MarkupUnitTest.java b/tobago-core/src/test/java/org/apache/myfaces/tobago/context/MarkupUnitTest.java
index a78a413..38519bd 100644
--- a/tobago-core/src/test/java/org/apache/myfaces/tobago/context/MarkupUnitTest.java
+++ b/tobago-core/src/test/java/org/apache/myfaces/tobago/context/MarkupUnitTest.java
@@ -36,6 +36,10 @@ public class MarkupUnitTest {
   public void testString() {
     Assert.assertNull(Markup.valueOf((String) null));
 
+    Assert.assertEquals("foobar", Markup.valueOf("foo$bar").toString());
+
+    Assert.assertEquals("fooBar", Markup.valueOf("fooBar").toString());
+
     Assert.assertArrayEquals(new String[]{"accent"}, toArray(Markup.valueOf("accent").iterator()));
 
     Assert.assertArrayEquals(AB, toArray(Markup.valueOf("a,b").iterator()));
@@ -45,6 +49,8 @@ public class MarkupUnitTest {
     Assert.assertArrayEquals(AB, toArray(Markup.valueOf("a b").iterator()));
 
     Assert.assertArrayEquals(AB, toArray(Markup.valueOf(", \ta , ,\n b ,").iterator()));
+
+    Assert.assertArrayEquals(AB, toArray(Markup.valueOf(", \ta\" , ,\n b ,").iterator()));
   }
 
   @Test

-- 
To stop receiving notification emails like this one, please contact
hnoeth@apache.org.