diff options
| -rw-r--r-- | libjava/ChangeLog | 8 | ||||
| -rw-r--r-- | libjava/java/text/DecimalFormat.java | 13 | ||||
| -rw-r--r-- | libjava/java/text/SimpleDateFormat.java | 10 | 
3 files changed, 26 insertions, 5 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index bdfd7753ef7..2d0597b2eec 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -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 diff --git a/libjava/java/text/DecimalFormat.java b/libjava/java/text/DecimalFormat.java index 2dfdd2751a6..7f946173fee 100644 --- a/libjava/java/text/DecimalFormat.java +++ b/libjava/java/text/DecimalFormat.java @@ -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; diff --git a/libjava/java/text/SimpleDateFormat.java b/libjava/java/text/SimpleDateFormat.java index 06ab66f5a70..7b282f3c62f 100644 --- a/libjava/java/text/SimpleDateFormat.java +++ b/libjava/java/text/SimpleDateFormat.java @@ -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);  | 

