8274714: Incorrect verifier protected access error message
Reviewed-by: dholmes, coleenp
This commit is contained in:
parent
45ce06c9f3
commit
e39bdc9ddb
src/hotspot/share/classfile
test/hotspot/jtreg/runtime/verifier
@ -1805,7 +1805,7 @@ void ClassVerifier::verify_method(const methodHandle& m, TRAPS) {
|
||||
no_control_flow = true; break;
|
||||
default:
|
||||
// We only need to check the valid bytecodes in class file.
|
||||
// And jsr and ret are not in the new class file format in JDK1.5.
|
||||
// And jsr and ret are not in the new class file format in JDK1.6.
|
||||
verify_error(ErrorContext::bad_code(bci),
|
||||
"Bad instruction: %02x", opcode);
|
||||
no_control_flow = false;
|
||||
@ -2424,7 +2424,8 @@ void ClassVerifier::verify_field_instructions(RawBytecodeStream* bcs,
|
||||
verify_error(ErrorContext::bad_type(bci,
|
||||
current_frame->stack_top_ctx(),
|
||||
TypeOrigin::implicit(current_type())),
|
||||
"Bad access to protected data in getfield");
|
||||
"Bad access to protected data in %s",
|
||||
is_getfield ? "getfield" : "putfield");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 8274714
|
||||
* @summary Make sure error message for protected putfield error is correct.
|
||||
* @compile putfieldProtected.jasm
|
||||
* @run main/othervm -Xverify:remote PutfieldProtectedTest
|
||||
*/
|
||||
|
||||
// Test that an int[] is not assignable to byte[].
|
||||
public class PutfieldProtectedTest {
|
||||
|
||||
public static void main(String args[]) throws Throwable {
|
||||
try {
|
||||
Class newClass = Class.forName("other.putfieldProtected");
|
||||
throw new RuntimeException("Expected VerifyError exception not thrown");
|
||||
} catch (java.lang.VerifyError e) {
|
||||
if (!e.getMessage().contains("Bad access to protected data in putfield")) {
|
||||
throw new RuntimeException("wrong exception: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
56
test/hotspot/jtreg/runtime/verifier/putfieldProtected.jasm
Normal file
56
test/hotspot/jtreg/runtime/verifier/putfieldProtected.jasm
Normal file
@ -0,0 +1,56 @@
|
||||
/*
|
||||
* Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
// This .jasm file is needed for this test to ensure that the illegal protected
|
||||
// access is done at runtime. Otherwise, javac would detect and complain about
|
||||
// the illegal access
|
||||
super public class another/SuperC version 51:0 {
|
||||
protected Field f:I;
|
||||
|
||||
public Method "<init>":"()V" stack 1 locals 1 {
|
||||
aload_0;
|
||||
invokespecial Method java/lang/Object."<init>":"()V";
|
||||
return;
|
||||
}
|
||||
} // end Class another/SuperC
|
||||
|
||||
|
||||
super public class other/putfieldProtected extends another/SuperC version 51:0 {
|
||||
|
||||
public Method "<init>":"()V" stack 1 locals 1 {
|
||||
aload_0;
|
||||
invokespecial Method another/SuperC."<init>":"()V";
|
||||
return;
|
||||
}
|
||||
|
||||
public static Method run:"()Z" stack 2 locals 2 {
|
||||
new class another/SuperC;
|
||||
dup;
|
||||
invokespecial Method another/SuperC."<init>":"()V";
|
||||
iconst_1;
|
||||
putfield Field another/SuperC.f:"I";
|
||||
iconst_1;
|
||||
ireturn;
|
||||
}
|
||||
|
||||
} // end Class other/putfieldProtected
|
Loading…
x
Reference in New Issue
Block a user