For PR libgcj/11085:
authorTom Tromey <tromey@redhat.com>
Sun, 8 Jun 2003 19:00:02 +0000 (19:00 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Sun, 8 Jun 2003 19:00:02 +0000 (19:00 +0000)
* java/text/SimpleDateFormat.java (parse(String,ParsePosition)):
Limit number of characters in numeric field when required.
* java/text/DecimalFormat.java (parse(String,ParsePosition)):
Respect maximumIntegerDigits.

From-SVN: r67633

libjava/ChangeLog
libjava/java/text/DecimalFormat.java
libjava/java/text/SimpleDateFormat.java

index bdfd7753ef7edb8968e30f18ab60983e141b3d31..2d0597b2eec0d619f0f3b6fe74963475da85d0d5 100644 (file)
@@ -1,3 +1,11 @@
+2003-06-07  Tom Tromey  <tromey@redhat.com>
+
+       For PR libgcj/11085:
+       * java/text/SimpleDateFormat.java (parse(String,ParsePosition)):
+       Limit number of characters in numeric field when required.
+       * java/text/DecimalFormat.java (parse(String,ParsePosition)):
+       Respect maximumIntegerDigits.
+
 2003-06-08  Michael Koch  <konqueror@gmx.de>
 
        * java/net/Socket.java
index 2dfdd2751a6260abc227282c13a5edf3b89357af..7f946173fee9f16f1e6cdd560e96f94330ed431c 100644 (file)
@@ -1,5 +1,5 @@
 /* DecimalFormat.java -- Formats and parses numbers
-   Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -693,8 +693,8 @@ public class DecimalFormat extends NumberFormat
     int index = pos.getIndex();
     StringBuffer buf = new StringBuffer ();
 
-      // We have to check both prefixes, because one might be empty.
-      // We want to pick the longest prefix that matches.
+    // We have to check both prefixes, because one might be empty.  We
+    // want to pick the longest prefix that matches.
     boolean got_pos = str.startsWith(positivePrefix, index);
     String np = (negativePrefix != null
                 ? negativePrefix
@@ -729,11 +729,14 @@ public class DecimalFormat extends NumberFormat
 
     // FIXME: handle Inf and NaN.
 
-      // FIXME: do we have to respect minimum/maxmimum digit stuff?
-      // What about leading zeros?  What about multiplier?
+    // FIXME: do we have to respect minimum digits?
+    // What about leading zeros?  What about multiplier?
 
     int start_index = index;
     int max = str.length();
+    int last = index + maximumIntegerDigits;
+    if (last > 0 && max > last)
+      max = last;
     char zero = symbols.getZeroDigit();
     int last_group = -1;
     boolean int_part = true;
index 06ab66f5a7013576f4b11c02443092375c10e957..7b282f3c62f4533618e3d3d85671f7366eb6e567 100644 (file)
@@ -570,6 +570,14 @@ public class SimpleDateFormat extends DateFormat
        while (++fmt_index < fmt_max && pattern.charAt(fmt_index) == ch)
          ;
        int fmt_count = fmt_index - first;
+
+       // We might need to limit the number of digits to parse in
+       // some cases.  We look to the next pattern character to
+       // decide.
+       boolean limit_digits = false;
+       if (fmt_index < fmt_max
+           && standardChars.indexOf(pattern.charAt(fmt_index)) >= 0)
+         limit_digits = true;
        --fmt_index;
 
        // We can handle most fields automatically: most either are
@@ -702,6 +710,8 @@ public class SimpleDateFormat extends DateFormat
        if (is_numeric)
          {
            numberFormat.setMinimumIntegerDigits(fmt_count);
+           if (limit_digits)
+             numberFormat.setMaximumIntegerDigits(fmt_count);
            if (maybe2DigitYear)
              index = pos.getIndex();
            Number n = numberFormat.parse(dateStr, pos);