You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2013/10/29 10:09:24 UTC

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

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 <sv...@meiers.net>
Authored: Tue Oct 29 10:08:28 2013 +0100
Committer: svenmeier <sv...@meiers.net>
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
 	 */