You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Vera Petrashkova (JIRA)" <ji...@apache.org> on 2007/07/06 13:06:04 UTC

[jira] Created: (HARMONY-4378) [drlvm][verifier] VM does not reject class when aastore instruction uses the value which is not compatible with the component type of array

[drlvm][verifier]  VM does not reject class when  aastore instruction uses the value which is not compatible with the component type of array
---------------------------------------------------------------------------------------------------------------------------------------------

                 Key: HARMONY-4378
                 URL: https://issues.apache.org/jira/browse/HARMONY-4378
             Project: Harmony
          Issue Type: Bug
          Components: DRLVM
            Reporter: Vera Petrashkova
            Priority: Minor
         Attachments: aastoreTest.zip

According to J2SE VM specifications VM must throw VerifyError when  assignment 
conversions are not applied.

But VM does not reject class when aastore instruction uses the value which is not compatible with the component type of array.

The incorrect situation can not be described on java because such source code is rejected by compiler.
It is similar the following case:
--------------------
public interface aastIntf { 
    public abstract void intfMethod();
}

public class aastClIm implements aastIntf {
    public void intfMethod() {
        return;
    }
    public int test (String[] args) {
        try {
            aastCl cl = new aastCl();
            cl.testField = new aaClIm();
            cl.testNeg();
            return 104;
       } catch (VerifyError e) {
           return 104;
       } catch (ArrayStoreException e) {
           return 104;
       }
   }
}

public class aastCl  {
    public aastIntf testField [];

    public void testNeg () {
        aastClIm [][] marr = new aastClIm[1][1];
         marr[0] = testField;                   <<<<<<<<<<<<<<<<<< wrong assignment
        return;
    }
}
------------------------

The following synthetic test demonstrates this issue. Class files are in attachment.
-------------aastIntf.jj------------------
.interface public aastIntf
.super java/lang/Object

.method public abstract intfMethod()V
.end method
-------aastCl.jj----------
.class public aastCl
.super java/lang/Object
.field public testField [LaastIntf;

; standard initializer
.method public <init>()V
   aload_0
   invokespecial java/lang/Object/<init>()V
   return
.end method

.method public testNeg()V
   .limit stack 3
   .limit locals 2
   aload_0
   getfield aastCl/testField [LaastIntf;
   astore_1

; aastClIm [][] marr = new aastClIm[1][1]
; marr[0] = testField 
   sipush 1
   sipush 1
   multianewarray [[LaastClIm; 2
   sipush 0
   aload_1
   aastore

  return
.end method
-------aastClIm.jj--------
.class public aastClIm
.super java/lang/Object
.implements aastIntf

; standard initializer
.method public <init>()V
   aload_0
   invokespecial java/lang/Object/<init>()V
   return
.end method

; test method
.method public test([Ljava/lang/String;)I
   .limit stack 3
   .limit locals 3
.catch java/lang/VerifyError from first to second using catcher
.catch java/lang/ArrayStoreException from first to second using catcher1
first:
   new aastCl
   dup
   invokespecial aastCl/<init>()V
   astore_2
   aload_2
   sipush 1
   anewarray aastClIm
   putfield aastCl/testField [LaastIntf;

   aload_2
   invokevirtual aastCl/testNeg()V
second:
   sipush 105
   ireturn
catcher:
   sipush 104
   ireturn
catcher1:
   sipush 104
   ireturn
.end method

.method public intfMethod()V
  .limit stack 2
  .limit locals 1
   return
.end method
--------test.java---------
public class test {
    public static void main(String[] args) {        
        try {           
            int t = new aastClIm().test(args);
            System.out.println( t == 104 ? "Test passed" : "Test failed");
            System.out.println("Returned value: "+t);
        } catch (Throwable e){
            System.out.println("Test failed. Unexpected error was thrown");
            e.printStackTrace();
        }
    }
}
-------------

Output on Harmony:
==========
Apache Harmony Launcher : (c) Copyright 1991, 2006 The Apache Software Foundation or its licensors, as applicable.
java version "1.5.0"
pre-alpha : not complete or compatible
svn = r551077, (Jun 27 2007), Windows/ia32/msvc 1310, release build
http://harmony.apache.org
Test failed
Returned value: 105


This test also fails on RI:
===========
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode)

Test failed
Returned value: 105

This issue causes the failure of VTS test
vm/jvms/classFile/constraints/structural/constraint18/aastore03/aastore03.xml


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Assigned: (HARMONY-4378) [drlvm][verifier] VM does not reject class when aastore instruction uses the value which is not compatible with the component type of array

Posted by "Mikhail Loenko (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/HARMONY-4378?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Mikhail Loenko reassigned HARMONY-4378:
---------------------------------------

    Assignee: Mikhail Loenko

> [drlvm][verifier]  VM does not reject class when  aastore instruction uses the value which is not compatible with the component type of array
> ---------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HARMONY-4378
>                 URL: https://issues.apache.org/jira/browse/HARMONY-4378
>             Project: Harmony
>          Issue Type: Bug
>          Components: DRLVM
>            Reporter: Vera Petrashkova
>            Assignee: Mikhail Loenko
>            Priority: Minor
>         Attachments: aastoreTest.zip
>
>
> According to J2SE VM specifications VM must throw VerifyError when  assignment 
> conversions are not applied.
> But VM does not reject class when aastore instruction uses the value which is not compatible with the component type of array.
> The incorrect situation can not be described on java because such source code is rejected by compiler.
> It is similar the following case:
> --------------------
> public interface aastIntf { 
>     public abstract void intfMethod();
> }
> public class aastClIm implements aastIntf {
>     public void intfMethod() {
>         return;
>     }
>     public int test (String[] args) {
>         try {
>             aastCl cl = new aastCl();
>             cl.testField = new aaClIm();
>             cl.testNeg();
>             return 104;
>        } catch (VerifyError e) {
>            return 104;
>        } catch (ArrayStoreException e) {
>            return 104;
>        }
>    }
> }
> public class aastCl  {
>     public aastIntf testField [];
>     public void testNeg () {
>         aastClIm [][] marr = new aastClIm[1][1];
>          marr[0] = testField;                   <<<<<<<<<<<<<<<<<< wrong assignment
>         return;
>     }
> }
> ------------------------
> The following synthetic test demonstrates this issue. Class files are in attachment.
> -------------aastIntf.jj------------------
> .interface public aastIntf
> .super java/lang/Object
> .method public abstract intfMethod()V
> .end method
> -------aastCl.jj----------
> .class public aastCl
> .super java/lang/Object
> .field public testField [LaastIntf;
> ; standard initializer
> .method public <init>()V
>    aload_0
>    invokespecial java/lang/Object/<init>()V
>    return
> .end method
> .method public testNeg()V
>    .limit stack 3
>    .limit locals 2
>    aload_0
>    getfield aastCl/testField [LaastIntf;
>    astore_1
> ; aastClIm [][] marr = new aastClIm[1][1]
> ; marr[0] = testField 
>    sipush 1
>    sipush 1
>    multianewarray [[LaastClIm; 2
>    sipush 0
>    aload_1
>    aastore
>   return
> .end method
> -------aastClIm.jj--------
> .class public aastClIm
> .super java/lang/Object
> .implements aastIntf
> ; standard initializer
> .method public <init>()V
>    aload_0
>    invokespecial java/lang/Object/<init>()V
>    return
> .end method
> ; test method
> .method public test([Ljava/lang/String;)I
>    .limit stack 3
>    .limit locals 3
> .catch java/lang/VerifyError from first to second using catcher
> .catch java/lang/ArrayStoreException from first to second using catcher1
> first:
>    new aastCl
>    dup
>    invokespecial aastCl/<init>()V
>    astore_2
>    aload_2
>    sipush 1
>    anewarray aastClIm
>    putfield aastCl/testField [LaastIntf;
>    aload_2
>    invokevirtual aastCl/testNeg()V
> second:
>    sipush 105
>    ireturn
> catcher:
>    sipush 104
>    ireturn
> catcher1:
>    sipush 104
>    ireturn
> .end method
> .method public intfMethod()V
>   .limit stack 2
>   .limit locals 1
>    return
> .end method
> --------test.java---------
> public class test {
>     public static void main(String[] args) {        
>         try {           
>             int t = new aastClIm().test(args);
>             System.out.println( t == 104 ? "Test passed" : "Test failed");
>             System.out.println("Returned value: "+t);
>         } catch (Throwable e){
>             System.out.println("Test failed. Unexpected error was thrown");
>             e.printStackTrace();
>         }
>     }
> }
> -------------
> Output on Harmony:
> ==========
> Apache Harmony Launcher : (c) Copyright 1991, 2006 The Apache Software Foundation or its licensors, as applicable.
> java version "1.5.0"
> pre-alpha : not complete or compatible
> svn = r551077, (Jun 27 2007), Windows/ia32/msvc 1310, release build
> http://harmony.apache.org
> Test failed
> Returned value: 105
> This test also fails on RI:
> ===========
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
> Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode)
> Test failed
> Returned value: 105
> This issue causes the failure of VTS test
> vm/jvms/classFile/constraints/structural/constraint18/aastore03/aastore03.xml

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Updated: (HARMONY-4378) [drlvm][verifier] VM does not reject class when aastore instruction uses the value which is not compatible with the component type of array

Posted by "Vera Petrashkova (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/HARMONY-4378?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Vera Petrashkova updated HARMONY-4378:
--------------------------------------

    Attachment: aastoreTest.zip

> [drlvm][verifier]  VM does not reject class when  aastore instruction uses the value which is not compatible with the component type of array
> ---------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HARMONY-4378
>                 URL: https://issues.apache.org/jira/browse/HARMONY-4378
>             Project: Harmony
>          Issue Type: Bug
>          Components: DRLVM
>            Reporter: Vera Petrashkova
>            Priority: Minor
>         Attachments: aastoreTest.zip
>
>
> According to J2SE VM specifications VM must throw VerifyError when  assignment 
> conversions are not applied.
> But VM does not reject class when aastore instruction uses the value which is not compatible with the component type of array.
> The incorrect situation can not be described on java because such source code is rejected by compiler.
> It is similar the following case:
> --------------------
> public interface aastIntf { 
>     public abstract void intfMethod();
> }
> public class aastClIm implements aastIntf {
>     public void intfMethod() {
>         return;
>     }
>     public int test (String[] args) {
>         try {
>             aastCl cl = new aastCl();
>             cl.testField = new aaClIm();
>             cl.testNeg();
>             return 104;
>        } catch (VerifyError e) {
>            return 104;
>        } catch (ArrayStoreException e) {
>            return 104;
>        }
>    }
> }
> public class aastCl  {
>     public aastIntf testField [];
>     public void testNeg () {
>         aastClIm [][] marr = new aastClIm[1][1];
>          marr[0] = testField;                   <<<<<<<<<<<<<<<<<< wrong assignment
>         return;
>     }
> }
> ------------------------
> The following synthetic test demonstrates this issue. Class files are in attachment.
> -------------aastIntf.jj------------------
> .interface public aastIntf
> .super java/lang/Object
> .method public abstract intfMethod()V
> .end method
> -------aastCl.jj----------
> .class public aastCl
> .super java/lang/Object
> .field public testField [LaastIntf;
> ; standard initializer
> .method public <init>()V
>    aload_0
>    invokespecial java/lang/Object/<init>()V
>    return
> .end method
> .method public testNeg()V
>    .limit stack 3
>    .limit locals 2
>    aload_0
>    getfield aastCl/testField [LaastIntf;
>    astore_1
> ; aastClIm [][] marr = new aastClIm[1][1]
> ; marr[0] = testField 
>    sipush 1
>    sipush 1
>    multianewarray [[LaastClIm; 2
>    sipush 0
>    aload_1
>    aastore
>   return
> .end method
> -------aastClIm.jj--------
> .class public aastClIm
> .super java/lang/Object
> .implements aastIntf
> ; standard initializer
> .method public <init>()V
>    aload_0
>    invokespecial java/lang/Object/<init>()V
>    return
> .end method
> ; test method
> .method public test([Ljava/lang/String;)I
>    .limit stack 3
>    .limit locals 3
> .catch java/lang/VerifyError from first to second using catcher
> .catch java/lang/ArrayStoreException from first to second using catcher1
> first:
>    new aastCl
>    dup
>    invokespecial aastCl/<init>()V
>    astore_2
>    aload_2
>    sipush 1
>    anewarray aastClIm
>    putfield aastCl/testField [LaastIntf;
>    aload_2
>    invokevirtual aastCl/testNeg()V
> second:
>    sipush 105
>    ireturn
> catcher:
>    sipush 104
>    ireturn
> catcher1:
>    sipush 104
>    ireturn
> .end method
> .method public intfMethod()V
>   .limit stack 2
>   .limit locals 1
>    return
> .end method
> --------test.java---------
> public class test {
>     public static void main(String[] args) {        
>         try {           
>             int t = new aastClIm().test(args);
>             System.out.println( t == 104 ? "Test passed" : "Test failed");
>             System.out.println("Returned value: "+t);
>         } catch (Throwable e){
>             System.out.println("Test failed. Unexpected error was thrown");
>             e.printStackTrace();
>         }
>     }
> }
> -------------
> Output on Harmony:
> ==========
> Apache Harmony Launcher : (c) Copyright 1991, 2006 The Apache Software Foundation or its licensors, as applicable.
> java version "1.5.0"
> pre-alpha : not complete or compatible
> svn = r551077, (Jun 27 2007), Windows/ia32/msvc 1310, release build
> http://harmony.apache.org
> Test failed
> Returned value: 105
> This test also fails on RI:
> ===========
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
> Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode)
> Test failed
> Returned value: 105
> This issue causes the failure of VTS test
> vm/jvms/classFile/constraints/structural/constraint18/aastore03/aastore03.xml

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Closed: (HARMONY-4378) [drlvm][verifier] VM does not reject class when aastore instruction uses the value which is not compatible with the component type of array

Posted by "Mikhail Loenko (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/HARMONY-4378?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Mikhail Loenko closed HARMONY-4378.
-----------------------------------

    Resolution: Invalid

Harmony should not introduce stricter checks comparing to RI, otherwise we will break existing apps. 
The test must be fixed or removed

> [drlvm][verifier]  VM does not reject class when  aastore instruction uses the value which is not compatible with the component type of array
> ---------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HARMONY-4378
>                 URL: https://issues.apache.org/jira/browse/HARMONY-4378
>             Project: Harmony
>          Issue Type: Bug
>          Components: DRLVM
>            Reporter: Vera Petrashkova
>            Assignee: Mikhail Loenko
>            Priority: Minor
>         Attachments: aastoreTest.zip
>
>
> According to J2SE VM specifications VM must throw VerifyError when  assignment 
> conversions are not applied.
> But VM does not reject class when aastore instruction uses the value which is not compatible with the component type of array.
> The incorrect situation can not be described on java because such source code is rejected by compiler.
> It is similar the following case:
> --------------------
> public interface aastIntf { 
>     public abstract void intfMethod();
> }
> public class aastClIm implements aastIntf {
>     public void intfMethod() {
>         return;
>     }
>     public int test (String[] args) {
>         try {
>             aastCl cl = new aastCl();
>             cl.testField = new aaClIm();
>             cl.testNeg();
>             return 104;
>        } catch (VerifyError e) {
>            return 104;
>        } catch (ArrayStoreException e) {
>            return 104;
>        }
>    }
> }
> public class aastCl  {
>     public aastIntf testField [];
>     public void testNeg () {
>         aastClIm [][] marr = new aastClIm[1][1];
>          marr[0] = testField;                   <<<<<<<<<<<<<<<<<< wrong assignment
>         return;
>     }
> }
> ------------------------
> The following synthetic test demonstrates this issue. Class files are in attachment.
> -------------aastIntf.jj------------------
> .interface public aastIntf
> .super java/lang/Object
> .method public abstract intfMethod()V
> .end method
> -------aastCl.jj----------
> .class public aastCl
> .super java/lang/Object
> .field public testField [LaastIntf;
> ; standard initializer
> .method public <init>()V
>    aload_0
>    invokespecial java/lang/Object/<init>()V
>    return
> .end method
> .method public testNeg()V
>    .limit stack 3
>    .limit locals 2
>    aload_0
>    getfield aastCl/testField [LaastIntf;
>    astore_1
> ; aastClIm [][] marr = new aastClIm[1][1]
> ; marr[0] = testField 
>    sipush 1
>    sipush 1
>    multianewarray [[LaastClIm; 2
>    sipush 0
>    aload_1
>    aastore
>   return
> .end method
> -------aastClIm.jj--------
> .class public aastClIm
> .super java/lang/Object
> .implements aastIntf
> ; standard initializer
> .method public <init>()V
>    aload_0
>    invokespecial java/lang/Object/<init>()V
>    return
> .end method
> ; test method
> .method public test([Ljava/lang/String;)I
>    .limit stack 3
>    .limit locals 3
> .catch java/lang/VerifyError from first to second using catcher
> .catch java/lang/ArrayStoreException from first to second using catcher1
> first:
>    new aastCl
>    dup
>    invokespecial aastCl/<init>()V
>    astore_2
>    aload_2
>    sipush 1
>    anewarray aastClIm
>    putfield aastCl/testField [LaastIntf;
>    aload_2
>    invokevirtual aastCl/testNeg()V
> second:
>    sipush 105
>    ireturn
> catcher:
>    sipush 104
>    ireturn
> catcher1:
>    sipush 104
>    ireturn
> .end method
> .method public intfMethod()V
>   .limit stack 2
>   .limit locals 1
>    return
> .end method
> --------test.java---------
> public class test {
>     public static void main(String[] args) {        
>         try {           
>             int t = new aastClIm().test(args);
>             System.out.println( t == 104 ? "Test passed" : "Test failed");
>             System.out.println("Returned value: "+t);
>         } catch (Throwable e){
>             System.out.println("Test failed. Unexpected error was thrown");
>             e.printStackTrace();
>         }
>     }
> }
> -------------
> Output on Harmony:
> ==========
> Apache Harmony Launcher : (c) Copyright 1991, 2006 The Apache Software Foundation or its licensors, as applicable.
> java version "1.5.0"
> pre-alpha : not complete or compatible
> svn = r551077, (Jun 27 2007), Windows/ia32/msvc 1310, release build
> http://harmony.apache.org
> Test failed
> Returned value: 105
> This test also fails on RI:
> ===========
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
> Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode)
> Test failed
> Returned value: 105
> This issue causes the failure of VTS test
> vm/jvms/classFile/constraints/structural/constraint18/aastore03/aastore03.xml

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.