Updated Branches:
  refs/heads/master 9d3066190 -> 19e7c1cdc

WICKET-5398 don't use possibly conflicting encoding from XML declaration
when parsing a String


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

Branch: refs/heads/master
Commit: 19e7c1cdc1acca652bd1b38e11db00d2f0302d61
Parents: 9d30661
Author: svenmeier <[email protected]>
Authored: Tue Oct 29 10:08:28 2013 +0100
Committer: svenmeier <[email protected]>
Committed: Tue Oct 29 10:08:28 2013 +0100

----------------------------------------------------------------------
 .../wicket/markup/parser/XmlPullParser.java     | 27 ++++++++++++--------
 .../wicket/markup/parser/XmlPullParserTest.java | 22 ++++++++++++++++
 2 files changed, 39 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/19e7c1cd/wicket-core/src/main/java/org/apache/wicket/markup/parser/XmlPullParser.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/parser/XmlPullParser.java 
b/wicket-core/src/main/java/org/apache/wicket/markup/parser/XmlPullParser.java
index 262b795..377138a 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/parser/XmlPullParser.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/parser/XmlPullParser.java
@@ -17,9 +17,9 @@
 package org.apache.wicket.markup.parser;
 
 import java.io.BufferedInputStream;
-import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.StringReader;
 import java.text.ParseException;
 
 import org.apache.wicket.markup.parser.XmlTag.TagType;
@@ -48,10 +48,9 @@ public final class XmlPullParser implements IXmlPullParser
        public static final String SCRIPT = "script";
 
        /**
-        * Reads the xml data from an input stream and converts the chars 
according to its encoding
-        * (<?xml ... encoding="..." ?>)
+        * The encoding of the XML.
         */
-       private XmlReader xmlReader;
+       private String encoding;
 
        /**
         * A XML independent reader which loads the whole source data into 
memory and which provides
@@ -84,7 +83,7 @@ public final class XmlPullParser implements IXmlPullParser
        @Override
        public final String getEncoding()
        {
-               return xmlReader.getEncoding();
+               return encoding;
        }
 
        @Override
@@ -544,7 +543,10 @@ public final class XmlPullParser implements IXmlPullParser
        @Override
        public void parse(final CharSequence string) throws IOException
        {
-               parse(new ByteArrayInputStream(string.toString().getBytes()), 
null);
+               Args.notNull(string, "string");
+
+               this.input = new FullyBufferedReader(new 
StringReader(string.toString()));
+               this.encoding = null;
        }
 
        /**
@@ -554,6 +556,8 @@ public final class XmlPullParser implements IXmlPullParser
         * @param in
         *            The input stream to read and parse
         * @throws IOException
+        * 
+        * @see {@link #parse(InputStream, String)}
         */
        @Override
        public void parse(final InputStream in) throws IOException
@@ -563,7 +567,9 @@ public final class XmlPullParser implements IXmlPullParser
        }
 
        /**
-        * Reads and parses markup from an input stream
+        * Reads and parses markup from an input stream.
+        * <p>
+        * Note: The input is closed after parsing.
         * 
         * @param inputStream
         *            The input stream to read and parse
@@ -578,13 +584,14 @@ public final class XmlPullParser implements IXmlPullParser
 
                try
                {
-                       xmlReader = new XmlReader(new 
BufferedInputStream(inputStream, 4000), encoding);
-                       input = new FullyBufferedReader(xmlReader);
+                       XmlReader xmlReader = new XmlReader(new 
BufferedInputStream(inputStream, 4000),
+                               encoding);
+                       this.input = new FullyBufferedReader(xmlReader);
+                       this.encoding = xmlReader.getEncoding();
                }
                finally
                {
                        IOUtils.closeQuietly(inputStream);
-                       IOUtils.closeQuietly(xmlReader);
                }
        }
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/19e7c1cd/wicket-core/src/test/java/org/apache/wicket/markup/parser/XmlPullParserTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/parser/XmlPullParserTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/markup/parser/XmlPullParserTest.java
index 2e26d05..ac88a6f 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/markup/parser/XmlPullParserTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markup/parser/XmlPullParserTest.java
@@ -194,6 +194,28 @@ public class XmlPullParserTest extends Assert
        }
 
        /**
+        * WICKET-5398 parsing from String
+        */
+       @Test
+       public void encodingOfString() throws Exception
+       {
+               // use an encoding that is not the system's file encoding
+               final String encoding;
+               if ("UTF-8".equals(System.getProperty("file.encoding")))
+               {
+                       encoding = "ISO-8859-1";
+               }
+               else
+               {
+                       encoding = "UTF-8";
+               }
+
+               final XmlPullParser parser = new XmlPullParser();
+               parser.parse(String.format("<?xml encoding='%s' ?><span 
id='umlaut-äöü'></span>", encoding));
+               assertEquals("umlaut-äöü", 
parser.nextTag().getAttribute("id"));
+       }
+
+       /**
         * 
         * @throws Exception
         */

Reply via email to