On 18 February 2014 15:58, Benedikt Ritter <brit...@apache.org> wrote: > 2014-02-18 16:28 GMT+01:00 Duncan Jones <djo...@apache.org>: > >> On 15 February 2014 10:35, <brit...@apache.org> wrote: >> > Author: britter >> > Date: Sat Feb 15 10:35:35 2014 >> > New Revision: 1568612 >> > >> > URL: http://svn.apache.org/r1568612 >> > Log: >> > LANG-977: NumericEntityEscaper incorrectly encodes supplementary >> characters. Thanks to Chris Karcher. >> >> >> Chris isn't listed as a contributor in the POM file. Should we add him >> or is the "due-to" field replacing the need for that? >> > > Well there are no absolute rules about this. But in this case we could add > him, I guess. I'll take care of this. > > Thanks!
Ah, ok. I wasn't sure whether a single committed patch equated to being a contributor. In your eyes, when should I add someone to the POM file? I like the idea of doing it relatively easily, since it's quite pleasing to see one's name listed as a contributor, but I don't want to fly in the face of what's normal on the project. >> >> - Duncan >> >> >> >> > >> > Modified: >> > commons/proper/lang/trunk/src/changes/changes.xml >> > >> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringEscapeUtils.java >> > >> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/text/translate/CharSequenceTranslator.java >> > >> commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/StringEscapeUtilsTest.java >> > >> > Modified: commons/proper/lang/trunk/src/changes/changes.xml >> > URL: >> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/changes/changes.xml?rev=1568612&r1=1568611&r2=1568612&view=diff >> > >> ============================================================================== >> > --- commons/proper/lang/trunk/src/changes/changes.xml [utf-8] (original) >> > +++ commons/proper/lang/trunk/src/changes/changes.xml [utf-8] Sat Feb 15 >> 10:35:35 2014 >> > @@ -22,6 +22,7 @@ >> > <body> >> > >> > <release version="3.3" date="TBA" description="Bugfix and Feature >> release"> >> > + <action issue="LANG-977" type="fix" dev="britter" due-to="Chris >> Karcher">NumericEntityEscaper incorrectly encodes supplementary >> characters</action> >> > <action issue="LANG-973" type="fix" dev="sebb">Make some private >> fields final</action> >> > <action issue="LANG-971" type="fix" >> dev="sebb">NumberUtils#isNumber(String) fails to reject invalid Octal >> numbers</action> >> > <action issue="LANG-972" type="fix" dev="sebb">NumberUtils#isNumber >> does not allow for hex 0XABCD</action> >> > >> > Modified: >> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringEscapeUtils.java >> > URL: >> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringEscapeUtils.java?rev=1568612&r1=1568611&r2=1568612&view=diff >> > >> ============================================================================== >> > --- >> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringEscapeUtils.java >> (original) >> > +++ >> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringEscapeUtils.java >> Sat Feb 15 10:35:35 2014 >> > @@ -185,7 +185,7 @@ public class StringEscapeUtils { >> > out.write(StringUtils.replace(input.toString(), >> CSV_QUOTE_STR, CSV_QUOTE_STR + CSV_QUOTE_STR)); >> > out.write(CSV_QUOTE); >> > } >> > - return input.length(); >> > + return Character.codePointCount(input, 0, input.length()); >> > } >> > } >> > >> > @@ -314,7 +314,7 @@ public class StringEscapeUtils { >> > >> > if ( input.charAt(0) != CSV_QUOTE || >> input.charAt(input.length() - 1) != CSV_QUOTE ) { >> > out.write(input.toString()); >> > - return input.length(); >> > + return Character.codePointCount(input, 0, >> input.length()); >> > } >> > >> > // strip quotes >> > @@ -326,7 +326,7 @@ public class StringEscapeUtils { >> > } else { >> > out.write(input.toString()); >> > } >> > - return input.length(); >> > + return Character.codePointCount(input, 0, input.length()); >> > } >> > } >> > >> > >> > Modified: >> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/text/translate/CharSequenceTranslator.java >> > URL: >> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/text/translate/CharSequenceTranslator.java?rev=1568612&r1=1568611&r2=1568612&view=diff >> > >> ============================================================================== >> > --- >> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/text/translate/CharSequenceTranslator.java >> (original) >> > +++ >> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/text/translate/CharSequenceTranslator.java >> Sat Feb 15 10:35:35 2014 >> > @@ -89,10 +89,10 @@ public abstract class CharSequenceTransl >> > pos+= c.length; >> > continue; >> > } >> > -// // contract with translators is that they have to >> understand codepoints >> > -// // and they just took care of a surrogate pair >> > + // contract with translators is that they have to >> understand codepoints >> > + // and they just took care of a surrogate pair >> > for (int pt = 0; pt < consumed; pt++) { >> > - pos += Character.charCount(Character.codePointAt(input, >> pt)); >> > + pos += Character.charCount(Character.codePointAt(input, >> pos)); >> > } >> > } >> > } >> > >> > Modified: >> commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/StringEscapeUtilsTest.java >> > URL: >> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/StringEscapeUtilsTest.java?rev=1568612&r1=1568611&r2=1568612&view=diff >> > >> ============================================================================== >> > --- >> commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/StringEscapeUtilsTest.java >> (original) >> > +++ >> commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/StringEscapeUtilsTest.java >> Sat Feb 15 10:35:35 2014 >> > @@ -348,6 +348,9 @@ public class StringEscapeUtilsTest { >> > >> > assertEquals("Supplementary character must be represented using >> a single escape", "𣎴", >> > escapeXml.translate("\uD84C\uDFB4")); >> > + >> > + assertEquals("Supplementary characters mixed with basic >> characters should be encoded correctly", "a b c 𣎴", >> > + escapeXml.translate("a b c \uD84C\uDFB4")); >> > } >> > >> > @Test >> > @@ -377,6 +380,9 @@ public class StringEscapeUtilsTest { >> > public void testUnescapeXmlSupplementaryCharacters() { >> > assertEquals("Supplementary character must be represented using >> a single escape", "\uD84C\uDFB4", >> > StringEscapeUtils.unescapeXml("𣎴") ); >> > + >> > + assertEquals("Supplementary characters mixed with basic >> characters should be decoded correctly", "a b c \uD84C\uDFB4", >> > + StringEscapeUtils.unescapeXml("a b c 𣎴") ); >> > } >> > >> > // Tests issue #38569 >> > @@ -396,22 +402,24 @@ public class StringEscapeUtilsTest { >> > >> > @Test >> > public void testEscapeCsvString() throws Exception { >> > - assertEquals("foo.bar", >> StringEscapeUtils.escapeCsv("foo.bar")); >> > - assertEquals("\"foo,bar\"", >> StringEscapeUtils.escapeCsv("foo,bar")); >> > - assertEquals("\"foo\nbar\"", >> StringEscapeUtils.escapeCsv("foo\nbar")); >> > - assertEquals("\"foo\rbar\"", >> StringEscapeUtils.escapeCsv("foo\rbar")); >> > - assertEquals("\"foo\"\"bar\"", >> StringEscapeUtils.escapeCsv("foo\"bar")); >> > + assertEquals("foo.bar", >> StringEscapeUtils.escapeCsv("foo.bar")); >> > + assertEquals("\"foo,bar\"", >> StringEscapeUtils.escapeCsv("foo,bar")); >> > + assertEquals("\"foo\nbar\"", >> StringEscapeUtils.escapeCsv("foo\nbar")); >> > + assertEquals("\"foo\rbar\"", >> StringEscapeUtils.escapeCsv("foo\rbar")); >> > + assertEquals("\"foo\"\"bar\"", >> StringEscapeUtils.escapeCsv("foo\"bar")); >> > + assertEquals("foo\uD84C\uDFB4bar", >> StringEscapeUtils.escapeCsv("foo\uD84C\uDFB4bar")); >> > assertEquals("", StringEscapeUtils.escapeCsv("")); >> > assertEquals(null, StringEscapeUtils.escapeCsv(null)); >> > } >> > >> > @Test >> > public void testEscapeCsvWriter() throws Exception { >> > - checkCsvEscapeWriter("foo.bar", "foo.bar"); >> > - checkCsvEscapeWriter("\"foo,bar\"", "foo,bar"); >> > - checkCsvEscapeWriter("\"foo\nbar\"", "foo\nbar"); >> > - checkCsvEscapeWriter("\"foo\rbar\"", "foo\rbar"); >> > - checkCsvEscapeWriter("\"foo\"\"bar\"", "foo\"bar"); >> > + checkCsvEscapeWriter("foo.bar", "foo.bar"); >> > + checkCsvEscapeWriter("\"foo,bar\"", "foo,bar"); >> > + checkCsvEscapeWriter("\"foo\nbar\"", "foo\nbar"); >> > + checkCsvEscapeWriter("\"foo\rbar\"", "foo\rbar"); >> > + checkCsvEscapeWriter("\"foo\"\"bar\"", "foo\"bar"); >> > + checkCsvEscapeWriter("foo\uD84C\uDFB4bar", >> "foo\uD84C\uDFB4bar"); >> > checkCsvEscapeWriter("", null); >> > checkCsvEscapeWriter("", ""); >> > } >> > @@ -428,11 +436,12 @@ public class StringEscapeUtilsTest { >> > >> > @Test >> > public void testUnescapeCsvString() throws Exception { >> > - assertEquals("foo.bar", >> StringEscapeUtils.unescapeCsv("foo.bar")); >> > - assertEquals("foo,bar", >> StringEscapeUtils.unescapeCsv("\"foo,bar\"")); >> > - assertEquals("foo\nbar", >> StringEscapeUtils.unescapeCsv("\"foo\nbar\"")); >> > - assertEquals("foo\rbar", >> StringEscapeUtils.unescapeCsv("\"foo\rbar\"")); >> > - assertEquals("foo\"bar", >> StringEscapeUtils.unescapeCsv("\"foo\"\"bar\"")); >> > + assertEquals("foo.bar", >> StringEscapeUtils.unescapeCsv("foo.bar")); >> > + assertEquals("foo,bar", >> StringEscapeUtils.unescapeCsv("\"foo,bar\"")); >> > + assertEquals("foo\nbar", >> StringEscapeUtils.unescapeCsv("\"foo\nbar\"")); >> > + assertEquals("foo\rbar", >> StringEscapeUtils.unescapeCsv("\"foo\rbar\"")); >> > + assertEquals("foo\"bar", >> StringEscapeUtils.unescapeCsv("\"foo\"\"bar\"")); >> > + assertEquals("foo\uD84C\uDFB4bar", >> StringEscapeUtils.unescapeCsv("foo\uD84C\uDFB4bar")); >> > assertEquals("", StringEscapeUtils.unescapeCsv("")); >> > assertEquals(null, StringEscapeUtils.unescapeCsv(null)); >> > >> > @@ -441,11 +450,12 @@ public class StringEscapeUtilsTest { >> > >> > @Test >> > public void testUnescapeCsvWriter() throws Exception { >> > - checkCsvUnescapeWriter("foo.bar", "foo.bar"); >> > - checkCsvUnescapeWriter("foo,bar", "\"foo,bar\""); >> > - checkCsvUnescapeWriter("foo\nbar", "\"foo\nbar\""); >> > - checkCsvUnescapeWriter("foo\rbar", "\"foo\rbar\""); >> > - checkCsvUnescapeWriter("foo\"bar", "\"foo\"\"bar\""); >> > + checkCsvUnescapeWriter("foo.bar", "foo.bar"); >> > + checkCsvUnescapeWriter("foo,bar", "\"foo,bar\""); >> > + checkCsvUnescapeWriter("foo\nbar", "\"foo\nbar\""); >> > + checkCsvUnescapeWriter("foo\rbar", "\"foo\rbar\""); >> > + checkCsvUnescapeWriter("foo\"bar", "\"foo\"\"bar\""); >> > + checkCsvUnescapeWriter("foo\uD84C\uDFB4bar", >> "foo\uD84C\uDFB4bar"); >> > checkCsvUnescapeWriter("", null); >> > checkCsvUnescapeWriter("", ""); >> > >> > >> > >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >> For additional commands, e-mail: dev-h...@commons.apache.org >> >> > > > -- > http://people.apache.org/~britter/ > http://www.systemoutprintln.de/ > http://twitter.com/BenediktRitter > http://github.com/britter --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org