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);
+    }  
 }