Repository: commons-lang Updated Branches: refs/heads/master 40134ecdb -> 52b46e74d
LANG-1152 StringIndexOutOfBoundsException or field over-write for large year fields in FastDateParser Project: http://git-wip-us.apache.org/repos/asf/commons-lang/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-lang/commit/52b46e74 Tree: http://git-wip-us.apache.org/repos/asf/commons-lang/tree/52b46e74 Diff: http://git-wip-us.apache.org/repos/asf/commons-lang/diff/52b46e74 Branch: refs/heads/master Commit: 52b46e74dd29eb3eb65a593a872fd57694bc154c Parents: 40134ec Author: Chas Honton <c...@apache.org> Authored: Tue Jul 7 21:15:58 2015 -0700 Committer: Chas Honton <c...@apache.org> Committed: Tue Jul 7 21:15:58 2015 -0700 ---------------------------------------------------------------------- src/changes/changes.xml | 1 + .../org/apache/commons/lang3/time/FastDatePrinter.java | 11 +++++++++-- .../apache/commons/lang3/time/FastDateFormatTest.java | 13 +++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-lang/blob/52b46e74/src/changes/changes.xml ---------------------------------------------------------------------- diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 9e14f45..83bf55a 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -22,6 +22,7 @@ <body> <release version="3.5" date="tba" description="tba"> + <action issue="LANG-1152" type="fix" dev="chas" due-to="Pas Filip">StringIndexOutOfBoundsException or field over-write for large year fields in FastDateParser</action> <action issue="LANG-1153" type="add" dev="chas">Implement ParsePosition api for FastDateParser</action> <action issue="LANG-1141" type="fix" dev="oheger">StrLookup.systemPropertiesLookup() no longer reacts on changes on system properties</action> <action issue="LANG-1147" type="fix" dev="sebb" due-to="Loic Guibert">EnumUtils *BitVector issue with more than 32 values Enum</action> http://git-wip-us.apache.org/repos/asf/commons-lang/blob/52b46e74/src/main/java/org/apache/commons/lang3/time/FastDatePrinter.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/lang3/time/FastDatePrinter.java b/src/main/java/org/apache/commons/lang3/time/FastDatePrinter.java index 3f6b3bd..84bf7e2 100644 --- a/src/main/java/org/apache/commons/lang3/time/FastDatePrinter.java +++ b/src/main/java/org/apache/commons/lang3/time/FastDatePrinter.java @@ -875,14 +875,21 @@ public class FastDatePrinter implements DatePrinter, Serializable { */ @Override public final void appendTo(final StringBuffer buffer, int value) { + int first = buffer.length(); // pad the buffer with adequate zeros for(int digit = 0; digit<mSize; ++digit) { - buffer.append('0'); + buffer.append('0'); } // backfill the buffer with non-zero digits int index = buffer.length(); for( ; value>0; value /= 10) { - buffer.setCharAt(--index, (char)('0' + value % 10)); + char c= (char)('0' + value % 10); + if(--index<first) { + buffer.insert(first, c); + } + else { + buffer.setCharAt(index, c); + } } } } http://git-wip-us.apache.org/repos/asf/commons-lang/blob/52b46e74/src/test/java/org/apache/commons/lang3/time/FastDateFormatTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/lang3/time/FastDateFormatTest.java b/src/test/java/org/apache/commons/lang3/time/FastDateFormatTest.java index 1bdc25a..1b69403 100644 --- a/src/test/java/org/apache/commons/lang3/time/FastDateFormatTest.java +++ b/src/test/java/org/apache/commons/lang3/time/FastDateFormatTest.java @@ -37,6 +37,7 @@ import java.util.concurrent.atomic.AtomicLong; import org.apache.commons.lang3.test.SystemDefaults; import org.apache.commons.lang3.test.SystemDefaultsSwitch; +import org.junit.Assert; import org.junit.Rule; import org.junit.Test; @@ -291,4 +292,16 @@ public class FastDateFormatTest { assertEquals(0, failures.get()); return totalElapsed.get(); } + + @Test + public void testLANG_1152() { + TimeZone utc = TimeZone.getTimeZone("UTC"); + Date date = new Date(Long.MAX_VALUE); + + String dateAsString = FastDateFormat.getInstance("yyyy-MM-dd", utc, Locale.US).format(date); + Assert.assertEquals("292278994-08-17", dateAsString); + + dateAsString = FastDateFormat.getInstance("dd/MM/yyyy", utc, Locale.US).format(date); + Assert.assertEquals("17/08/292278994", dateAsString); + } }