Updated Branches:
  refs/heads/master 80adc543c -> fb2b200f2

WICKET-4937 Add IResponseFilter that can filter out invalid XML characters

Do not append invalid xml characters


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

Branch: refs/heads/master
Commit: fb2b200f2457bbac1bab4879e03c4e4964754ed1
Parents: 80adc54
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Mon Dec 24 10:06:46 2012 +0200
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Mon Dec 24 10:07:35 2012 +0200

----------------------------------------------------------------------
 .../response/filter/XmlCleaningResponseFilter.java |   10 ++-----
 .../filter/XmlCleaningResponseFilterTest.java      |   21 +++++++++++++++
 2 files changed, 24 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/fb2b200f/wicket-core/src/main/java/org/apache/wicket/response/filter/XmlCleaningResponseFilter.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/response/filter/XmlCleaningResponseFilter.java
 
b/wicket-core/src/main/java/org/apache/wicket/response/filter/XmlCleaningResponseFilter.java
index 3289016..5552552 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/response/filter/XmlCleaningResponseFilter.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/response/filter/XmlCleaningResponseFilter.java
@@ -111,14 +111,10 @@ public class XmlCleaningResponseFilter implements 
IResponseFilter
                                                                new Object[] 
{String.format("0x%X", codePoint), i, new String(chars)});
                                        }
                                }
-                               else
+                               else if (isDebugEnabled)
                                {
-                                       
out.append(Character.toChars(codePoint));
-                                       if (isDebugEnabled)
-                                       {
-                                               
LOG.debug(String.format("Dropping character for codePoint '0x%X' at position 
'%d'",
-                                                               codePoint, i));
-                                       }
+                                       LOG.debug(String.format("Dropping 
character for codePoint '0x%X' at position '%d'",
+                                                       codePoint, i));
                                }
                        }
                        else if (out != null)

http://git-wip-us.apache.org/repos/asf/wicket/blob/fb2b200f/wicket-core/src/test/java/org/apache/wicket/response/filter/XmlCleaningResponseFilterTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/response/filter/XmlCleaningResponseFilterTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/response/filter/XmlCleaningResponseFilterTest.java
index 1465025..1c648b1 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/response/filter/XmlCleaningResponseFilterTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/response/filter/XmlCleaningResponseFilterTest.java
@@ -50,6 +50,27 @@ public class XmlCleaningResponseFilterTest extends Assert {
        }
 
        /**
+        * Tests that invalid XML characters are removed
+        * @throws Exception
+        */
+       @Test
+       public void filterMultipleInvalid() throws Exception
+       {
+               XmlCleaningResponseFilter filter = new 
XmlCleaningResponseFilter();
+               CharSequence text = new StringBuilder()
+                       .append(START_ROOT_ELEMENT)
+                       .append(new String(new int[]{0x0008}, 0, 1))
+                       .append("a")
+                       .append(new String(new int[]{0x0010}, 0, 1))
+                       .append("b")
+                       .append(new String(new int[]{0xD800}, 0, 1))
+                       .append(END_ROOT_ELEMENT);
+
+               AppendingStringBuffer filtered = filter.filter(new 
AppendingStringBuffer(text));
+               assertEquals(START_ROOT_ELEMENT+"ab"+END_ROOT_ELEMENT, 
filtered.toString());
+       }
+
+       /**
         * Tests that valid XML characters are preserved
         * @throws Exception
         */

Reply via email to