JDK-4434219 : test/java/text/Format/Bug4407042.java fails with exceptions
  • Type: Bug
  • Component: hotspot
  • Sub-Component: runtime
  • Affected Version: 1.4.0
  • Priority: P2
  • Status: Closed
  • Resolution: Duplicate
  • OS: generic
  • CPU: generic
  • Submitted: 2001-04-05
  • Updated: 2001-04-06
  • Resolved: 2001-04-06
Related Reports
Duplicate :  
Description
test/java/text/Format/Bug4407042.java fails with the following exception.

java version "1.4.0-internal"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-internal-okutsu-010401-19:46)
Java HotSpot(TM) Client VM (build 1.4.0-beta-b58, mixed mode)

java.lang.StringIndexOutOfBoundsException: String index out of range: 2
        at java.lang.String.charAt(String.java:432)
        at java.lang.Long.parseLong(Long.java:334)
        at java.lang.Long.parseLong(Long.java:385)
        at java.text.DigitList.getLong(DigitList.java:157)
        at java.text.DecimalFormat.parse(DecimalFormat.java:986)
        at java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:1050)
        at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:793)
        at java.text.DateFormat.parse(DateFormat.java:326)
        at Bug4407042$DateParseThread.run(Bug4407042.java:50)

or

java.lang.NullPointerException
        at java.lang.String.charAt(String.java:434)
        at java.lang.Long.parseLong(Long.java:325)
        at java.lang.Long.parseLong(Long.java:385)
        at java.text.DigitList.getLong(DigitList.java:157)
        at java.text.DecimalFormat.parse(DecimalFormat.java:986)
        at java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:1050)
        at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:793)
        at java.text.DateFormat.parse(DateFormat.java:326)
        at Bug4407042$DateParseThread.run(Bug4407042.java:50)


This problem is reproducible on Win32 and Linux. On Solaris, there is another problem which is very likely a hotspot bug.

Comments
EVALUATION In DigitList.getLong(), changing: return Long.parseLong(temp.toString()); to long result = 0; String str = temp.toString(); try { result = Long.parseLong(str); } catch (Exception e) { System.err.println("string = \"" + str + "\", length = " + str.length()); e.printStackTrace(); } return result; showed the following output: string = "2000", length = 4 java.lang.NullPointerException at java.lang.String.charAt(String.java:434) at java.lang.Long.parseLong(Long.java:325) at java.lang.Long.parseLong(Long.java:385) at java.text.DigitList.getLong(DigitList.java:157) at java.text.DecimalFormat.parse(DecimalFormat.java:986) at java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:1050) at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:793) at java.text.DateFormat.parse(DateFormat.java:326) at Bug4407042$DateParseThread.run(Bug4407042.java:50) string = "11", length = 2 java.lang.StringIndexOutOfBoundsException: String index out of range: 0 at java.lang.String.charAt(String.java:432) at java.lang.Long.parseLong(Long.java:325) at java.lang.Long.parseLong(Long.java:385) at java.text.DigitList.getLong(DigitList.java:157) at java.text.DecimalFormat.parse(DecimalFormat.java:986) at java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:1050) at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:793) at java.text.DateFormat.parse(DateFormat.java:326) at Bug4407042$DateParseThread.run(Bug4407042.java:50) string = "1", length = 1 java.lang.NumberFormatException: at java.lang.Long.parseLong(Long.java:327) at java.lang.Long.parseLong(Long.java:385) at java.text.DigitList.getLong(DigitList.java:157) at java.text.DecimalFormat.parse(DecimalFormat.java:986) at java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:1262) at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:793) at java.text.DateFormat.parse(DateFormat.java:326) at Bug4407042$DateParseThread.run(Bug4407042.java:50) The given parameters to Long.parseLong() seem to be correct. I'm reassigning this to runtime. masayoshi.okutsu@Eng 2001-04-05
05-04-2001