Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4793774

VM regression in 1.4.2-b10: "illegal UTF8 string in constant pool" fro

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: P2 P2
    • None
    • 1.4.2
    • tools
    • None
    • x86
    • linux_redhat_7.2

      Consider this source file, which is stripped out of:

      http://cvs.apache.org/viewcvs.cgi/xml-xerces/java/src/org/apache/xerces/impl/xpath/regex/Token.java

      ----%<---- Test.java
      public class Test {
          private static final String x1 = "\u0000\u007F\u0080\u00FF\u0100\u017F\u0180\u024F\u0250\u02AF\u02B0\u02FF\u0300\u036F\u0370\u03FF\u0400\u04FF\u0530\u058F\u0590\u05FF\u0600\u06FF\u0700\u074F\u0780\u07BF";
          public static void main(String[] args) {
              StringBuffer buf1 = new StringBuffer(String.valueOf(x1.length()));
              StringBuffer buf2 = new StringBuffer("OK; length=");
              buf2.append(buf1);
              System.out.println(buf2);
          }
      }
      ----%<----

      Compiled under 1.3.1, it can be run on 1.3.1 or 1.4.1_01 but not 1.4.2-beta-b10. Compiled under 1.4.x, it can be run on 1.4.x but not 1.3.1.

      illegalutf8test$ /space/jdk1.3.1_03/bin/javac Test.java
      illegalutf8test$ /space/jdk1.3.1_03/bin/java Test
      OK; length=28
      illegalutf8test$ /space/jdk1.4.1_01/bin/java Test
      OK; length=28
      illegalutf8test$ /space/jdk1.4.2-beta-b10/bin/java Test
      Exception in thread "main" java.lang.ClassFormatError: Test (Illegal UTF8 string in constant pool)
      at java.lang.ClassLoader.defineClass0(Native Method)
      at java.lang.ClassLoader.defineClass(ClassLoader.java:504)
      at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
      at java.net.URLClassLoader.defineClass(URLClassLoader.java:250)
      at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
      at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
      at java.security.AccessController.doPrivileged(Native Method)
      at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
      at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
      at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)
      Could not find the main class. Program will exit.
      illegalutf8test$ /space/jdk1.4.1_01/bin/javac Test.java
      illegalutf8test$ /space/jdk1.3.1_03/bin/java Test
      Exception in thread "main" java.lang.NoSuchMethodError
      at Test.main(Test.java:6)
      illegalutf8test$ /space/jdk1.4.1_01/bin/java Test
      OK; length=28
      illegalutf8test$ /space/jdk1.4.2-beta-b10/bin/java Test
      OK; length=28
      illegalutf8test$ /space/jdk1.4.2-beta-b10/bin/javac Test.java
      illegalutf8test$ /space/jdk1.3.1_03/bin/java Test
      Exception in thread "main" java.lang.NoSuchMethodError
      at Test.main(Test.java:6)
      illegalutf8test$ /space/jdk1.4.1_01/bin/java Test
      OK; length=28
      illegalutf8test$ /space/jdk1.4.2-beta-b10/bin/java Test
      OK; length=28
      illegalutf8test$ /space/jdk1.3.1_03/bin/java -version
      java version "1.3.1_03"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_03-b03)
      Java HotSpot(TM) Client VM (build 1.3.1_03-b03, mixed mode)
      illegalutf8test$ /space/jdk1.4.1_01/bin/java -version
      java version "1.4.1_01"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_01-b01)
      Java HotSpot(TM) Client VM (build 1.4.1_01-b01, mixed mode)
      illegalutf8test$ /space/jdk1.4.2-beta-b10/bin/java -version
      java version "1.4.2-beta"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2-beta-b10)
      Java HotSpot(TM) Client VM (build 1.4.2-beta-b10, mixed mode)
      illegalutf8test$


      Looks like some check in the VM was tightened up in 1.4.2 - unfortunately this can break older compiled code.


      To see in NetBeans, get a NetBeans development build, open an XML file, and right-click in the Editor and choose Validate XML. Under 1.4.1_01, it validates; under 1.4.2, a ClassFormatError is thrown from Xerces code. I do not know offhand what version of javac was used to compile this xerces2.jar; I think we got it in binary form from xml.apache.org.
      ###@###.### 2002-12-13
      ###@###.### 2002-12-13
      ###@###.### 2002-12-13
      ###@###.### 2002-12-13

            gafter Neal Gafter (Inactive)
            jglick Jesse Glick (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: