You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ch...@apache.org on 2015/07/08 07:50:15 UTC
[lang] LANG-1152 StringIndexOutOfBoundsException or field over-write
for large year fields in FastDateParser
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 <ch...@apache.org>
Authored: Tue Jul 7 21:15:58 2015 -0700
Committer: Chas Honton <ch...@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);
+ }
}