You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by il...@apache.org on 2016/10/13 06:45:49 UTC
svn commit: r1764605 - in
/cocoon/subprojects/cocoon-serializers-charsets/trunk: ./
src/main/java/org/apache/cocoon/components/serializers/encoding/
src/main/java/org/apache/cocoon/components/serializers/util/ src/test/
src/test/java/ src/test/java/org...
Author: ilgrosso
Date: Thu Oct 13 06:45:49 2016
New Revision: 1764605
URL: http://svn.apache.org/viewvc?rev=1764605&view=rev
Log:
[COCOON-2352] Reworking the provided patch for cocoon-serializers-charsets
Added:
cocoon/subprojects/cocoon-serializers-charsets/trunk/src/test/
cocoon/subprojects/cocoon-serializers-charsets/trunk/src/test/java/
cocoon/subprojects/cocoon-serializers-charsets/trunk/src/test/java/org/
cocoon/subprojects/cocoon-serializers-charsets/trunk/src/test/java/org/apache/
cocoon/subprojects/cocoon-serializers-charsets/trunk/src/test/java/org/apache/cocoon/
cocoon/subprojects/cocoon-serializers-charsets/trunk/src/test/java/org/apache/cocoon/components/
cocoon/subprojects/cocoon-serializers-charsets/trunk/src/test/java/org/apache/cocoon/components/serializers/
cocoon/subprojects/cocoon-serializers-charsets/trunk/src/test/java/org/apache/cocoon/components/serializers/encoding/
cocoon/subprojects/cocoon-serializers-charsets/trunk/src/test/java/org/apache/cocoon/components/serializers/encoding/XMLEncoderTest.java (with props)
Modified:
cocoon/subprojects/cocoon-serializers-charsets/trunk/ (props changed)
cocoon/subprojects/cocoon-serializers-charsets/trunk/pom.xml
cocoon/subprojects/cocoon-serializers-charsets/trunk/src/main/java/org/apache/cocoon/components/serializers/encoding/XMLEncoder.java
cocoon/subprojects/cocoon-serializers-charsets/trunk/src/main/java/org/apache/cocoon/components/serializers/util/EncodingSerializer.java
Propchange: cocoon/subprojects/cocoon-serializers-charsets/trunk/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Thu Oct 13 06:45:49 2016
@@ -0,0 +1 @@
+target
Modified: cocoon/subprojects/cocoon-serializers-charsets/trunk/pom.xml
URL: http://svn.apache.org/viewvc/cocoon/subprojects/cocoon-serializers-charsets/trunk/pom.xml?rev=1764605&r1=1764604&r2=1764605&view=diff
==============================================================================
--- cocoon/subprojects/cocoon-serializers-charsets/trunk/pom.xml (original)
+++ cocoon/subprojects/cocoon-serializers-charsets/trunk/pom.xml Thu Oct 13 06:45:49 2016
@@ -18,8 +18,8 @@
under the License.
-->
<!--+
- | @version $Id$
- +-->
+| @version $Id$
++-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
@@ -57,6 +57,12 @@
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
Modified: cocoon/subprojects/cocoon-serializers-charsets/trunk/src/main/java/org/apache/cocoon/components/serializers/encoding/XMLEncoder.java
URL: http://svn.apache.org/viewvc/cocoon/subprojects/cocoon-serializers-charsets/trunk/src/main/java/org/apache/cocoon/components/serializers/encoding/XMLEncoder.java?rev=1764605&r1=1764604&r2=1764605&view=diff
==============================================================================
--- cocoon/subprojects/cocoon-serializers-charsets/trunk/src/main/java/org/apache/cocoon/components/serializers/encoding/XMLEncoder.java (original)
+++ cocoon/subprojects/cocoon-serializers-charsets/trunk/src/main/java/org/apache/cocoon/components/serializers/encoding/XMLEncoder.java Thu Oct 13 06:45:49 2016
@@ -30,6 +30,8 @@ public class XMLEncoder extends Compiled
private static final char ENCODE_LT[] = "<".toCharArray();
private static final char ENCODE_GT[] = ">".toCharArray();
+ private Character highSurrogate = null;
+
/**
* Create a new instance of this <code>XMLEncoder</code>.
*/
@@ -47,6 +49,10 @@ public class XMLEncoder extends Compiled
super(name);
}
+ public void reset() {
+ this.highSurrogate = null;
+ }
+
/**
* Return true or false wether this encoding can encode the specified
* character or not.
@@ -85,6 +91,18 @@ public class XMLEncoder extends Compiled
* specified character.
*/
public char[] encode(char c) {
+ if (highSurrogate != null) {
+ if (!Character.isLowSurrogate(c)) {
+ throw new IllegalArgumentException("Expected low surrogate char");
+ }
+ int codePoint = Character.toCodePoint(highSurrogate, c);
+ highSurrogate = null;
+ return new char[] { (char) codePoint };
+ } else if (Character.isHighSurrogate(c)) {
+ highSurrogate = c;
+ return new char[0];
+ }
+
switch (c) {
case 0x22: return(ENCODE_QUOT); // (") ["]
case 0x26: return(ENCODE_AMP); // (&) [&]
Modified: cocoon/subprojects/cocoon-serializers-charsets/trunk/src/main/java/org/apache/cocoon/components/serializers/util/EncodingSerializer.java
URL: http://svn.apache.org/viewvc/cocoon/subprojects/cocoon-serializers-charsets/trunk/src/main/java/org/apache/cocoon/components/serializers/util/EncodingSerializer.java?rev=1764605&r1=1764604&r2=1764605&view=diff
==============================================================================
--- cocoon/subprojects/cocoon-serializers-charsets/trunk/src/main/java/org/apache/cocoon/components/serializers/util/EncodingSerializer.java (original)
+++ cocoon/subprojects/cocoon-serializers-charsets/trunk/src/main/java/org/apache/cocoon/components/serializers/util/EncodingSerializer.java Thu Oct 13 06:45:49 2016
@@ -29,6 +29,7 @@ import javax.servlet.http.HttpServletReq
import org.apache.cocoon.components.serializers.encoding.Charset;
import org.apache.cocoon.components.serializers.encoding.CharsetFactory;
import org.apache.cocoon.components.serializers.encoding.Encoder;
+import org.apache.cocoon.components.serializers.encoding.XMLEncoder;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
@@ -149,11 +150,16 @@ public abstract class EncodingSerializer
* Reset this <code>EncodingSerializer</code>.
*/
public void recycle() {
- if (processing) throw new IllegalStateException();
+ if (processing) {
+ throw new IllegalStateException();
+ }
this.namespaces = new Namespaces();
this.locator = null;
this.out = null;
this.prolog = true;
+ if (this.encoder instanceof XMLEncoder) {
+ ((XMLEncoder) this.encoder).reset();
+ }
}
/**
Added: cocoon/subprojects/cocoon-serializers-charsets/trunk/src/test/java/org/apache/cocoon/components/serializers/encoding/XMLEncoderTest.java
URL: http://svn.apache.org/viewvc/cocoon/subprojects/cocoon-serializers-charsets/trunk/src/test/java/org/apache/cocoon/components/serializers/encoding/XMLEncoderTest.java?rev=1764605&view=auto
==============================================================================
--- cocoon/subprojects/cocoon-serializers-charsets/trunk/src/test/java/org/apache/cocoon/components/serializers/encoding/XMLEncoderTest.java (added)
+++ cocoon/subprojects/cocoon-serializers-charsets/trunk/src/test/java/org/apache/cocoon/components/serializers/encoding/XMLEncoderTest.java Thu Oct 13 06:45:49 2016
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cocoon.components.serializers.encoding;
+
+import static junit.framework.Assert.assertTrue;
+
+import java.util.Arrays;
+import org.junit.Test;
+
+public class XMLEncoderTest {
+
+ private final XMLEncoder encoder = new XMLEncoder();
+
+ /**
+ * Test COCOON-2352: XMLEncoder doesn't support Unicode surrogate pairs.
+ */
+ @Test
+ public void encodingSurrogatePairs() {
+ assertTrue(encoder.encode('\uD83C').length == 0);
+
+ assertTrue(Arrays.equals(new char[] { (char) 127808 }, encoder.encode('\uDF40')));
+ }
+}
Propchange: cocoon/subprojects/cocoon-serializers-charsets/trunk/src/test/java/org/apache/cocoon/components/serializers/encoding/XMLEncoderTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cocoon/subprojects/cocoon-serializers-charsets/trunk/src/test/java/org/apache/cocoon/components/serializers/encoding/XMLEncoderTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: cocoon/subprojects/cocoon-serializers-charsets/trunk/src/test/java/org/apache/cocoon/components/serializers/encoding/XMLEncoderTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain