undefect. CWE-407 — 63 sites patched across 27 ecosystems
Authors: russell@unturf.com · brackishbert@gmail.com · foxhop.net · TimeHexOn.com Patches, unit tests, benchmarks, whitepaper, and outreach briefs. Public domain — no copyright claimed. Use freely.
This commit is contained in:
commit
0a580b313d
70422 changed files with 17213626 additions and 0 deletions
|
|
@ -0,0 +1,246 @@
|
|||
/*
|
||||
* @test /nodynamiccopyright/
|
||||
* @bug 4319507 4785453
|
||||
* @summary Verify correct implementation of JLS2e 6.6.2.1
|
||||
* @author maddox
|
||||
*
|
||||
* @compile/fail/ref=ProtectedMemberAccess4.out --diags=formatterOptions=-simpleNames;layout=%b:%l:%_%m ProtectedMemberAccess4.java
|
||||
*/
|
||||
|
||||
// 33 errors expected.
|
||||
|
||||
import pkg.SuperClass;
|
||||
|
||||
class ProtectedMemberAccess4 extends pkg.SuperClass {
|
||||
|
||||
// Access to a protected instance (non-static) field, instance method,
|
||||
// or member type by a qualified name is always legal in a subclass of
|
||||
// the class in which the member is declared. Such access to a protected
|
||||
// instance field or instance method is allowed only if the qualifying type
|
||||
// or the type of the qualifying expression is (a subclass of) the class
|
||||
// in which the reference occurs. In this test case, the qualifying type
|
||||
// is a superclass, thus all of the qualified references to instance fields
|
||||
// and instance methods are illegal.
|
||||
|
||||
pkg.SuperClass x = new pkg.SuperClass();
|
||||
|
||||
static pkg.SuperClass sx = new pkg.SuperClass();
|
||||
|
||||
int i = x.pi; // illegal
|
||||
int j = x.spi; // ok
|
||||
|
||||
int n = sx.pi; // illegal
|
||||
int m = sx.spi; // ok
|
||||
|
||||
static int sn = sx.pi; // illegal
|
||||
static int sm = sx.spi; // ok
|
||||
|
||||
int w = x.pm(); // illegal
|
||||
int y = x.spm(); // ok
|
||||
|
||||
int u = sx.pm(); // illegal
|
||||
int v = sx.spm(); // ok
|
||||
|
||||
pkg.SuperClass.pC obj1; // ok
|
||||
pkg.SuperClass.spC obj2; // ok
|
||||
|
||||
pkg.SuperClass.pI obj3; // ok
|
||||
pkg.SuperClass.spI obj4; // ok
|
||||
|
||||
Object o1 = (pkg.SuperClass.pC) null; // ok
|
||||
Object o2 = (pkg.SuperClass.spC) null; // ok
|
||||
|
||||
Object o3 = (pkg.SuperClass.pI) null; // ok
|
||||
Object o4 = (pkg.SuperClass.spI) null; // ok
|
||||
|
||||
class C1 extends pkg.SuperClass.pC {} // ok
|
||||
class C2 extends pkg.SuperClass.spC {} // ok
|
||||
|
||||
interface I1 extends pkg.SuperClass.pI {} // ok
|
||||
interface I2 extends pkg.SuperClass.spI {} // ok
|
||||
|
||||
static {
|
||||
|
||||
pkg.SuperClass lx = new pkg.SuperClass();
|
||||
|
||||
sx.pi = 1; // illegal
|
||||
sx.spi = 2; // ok
|
||||
|
||||
lx.pi = 1; // illegal
|
||||
lx.spi = 2; // ok
|
||||
|
||||
int n = sx.pi; // illegal
|
||||
int m = sx.spi; // ok
|
||||
|
||||
int k = lx.pi; // illegal
|
||||
int l = lx.spi; // ok
|
||||
|
||||
int u = sx.pm(); // illegal
|
||||
int v = sx.spm(); // ok
|
||||
|
||||
int w = lx.pm(); // illegal
|
||||
int z = lx.spm(); // ok
|
||||
|
||||
pkg.SuperClass.pC obj1; // ok
|
||||
pkg.SuperClass.spC obj2; // ok
|
||||
|
||||
pkg.SuperClass.pI obj3; // ok
|
||||
pkg.SuperClass.spI obj4; // ok
|
||||
|
||||
Object o1 = (pkg.SuperClass.pC) null; // ok
|
||||
Object o2 = (pkg.SuperClass.spC) null; // ok
|
||||
|
||||
Object o3 = (pkg.SuperClass.pI) null; // ok
|
||||
Object o4 = (pkg.SuperClass.spI) null; // ok
|
||||
|
||||
//class C1 extends pkg.SuperClass.pC {}
|
||||
class C2 extends pkg.SuperClass.spC {} // ok
|
||||
|
||||
//interface I1 extends pkg.SuperClass.pI {}
|
||||
//interface I2 extends pkg.SuperClass.spI {}
|
||||
|
||||
}
|
||||
|
||||
void m() {
|
||||
|
||||
pkg.SuperClass lx = new pkg.SuperClass();
|
||||
|
||||
x.pi = 1; // illegal
|
||||
x.spi = 2; // ok
|
||||
|
||||
sx.pi = 1; // illegal
|
||||
sx.spi = 2; // ok
|
||||
|
||||
lx.pi = 1; // illegal
|
||||
lx.spi = 2; // ok
|
||||
|
||||
int t = x.pm(); // illegal
|
||||
int y = x.spm(); // ok
|
||||
|
||||
int u = sx.pm(); // illegal
|
||||
int v = sx.spm(); // ok
|
||||
|
||||
int w = lx.pm(); // illegal
|
||||
int z = lx.spm(); // ok
|
||||
|
||||
int i = x.pi; // illegal
|
||||
int j = x.spi; // ok
|
||||
|
||||
int n = sx.pi; // illegal
|
||||
int m = sx.spi; // ok
|
||||
|
||||
int k = lx.pi; // illegal
|
||||
int l = lx.spi; // ok
|
||||
|
||||
pkg.SuperClass.pC obj1; // ok
|
||||
pkg.SuperClass.spC obj2; // ok
|
||||
|
||||
pkg.SuperClass.pI obj3; // ok
|
||||
pkg.SuperClass.spI obj4; // ok
|
||||
|
||||
Object o1 = (pkg.SuperClass.pC) null; // ok
|
||||
Object o2 = (pkg.SuperClass.spC) null; // ok
|
||||
|
||||
Object o3 = (pkg.SuperClass.pI) null; // ok
|
||||
Object o4 = (pkg.SuperClass.spI) null; // ok
|
||||
|
||||
class C1 extends pkg.SuperClass.pC {} // ok
|
||||
class C2 extends pkg.SuperClass.spC {} // ok
|
||||
|
||||
//interface I1 extends pkg.SuperClass.pI {}
|
||||
//interface I2 extends pkg.SuperClass.spI {}
|
||||
|
||||
}
|
||||
|
||||
class Inner {
|
||||
|
||||
int i = x.pi; // illegal
|
||||
int j = x.spi; // ok
|
||||
|
||||
int n = sx.pi; // illegal
|
||||
int m = sx.spi; // ok
|
||||
|
||||
//static int sn = sx.pi;
|
||||
//static int sm = sx.spi;
|
||||
|
||||
int w = x.pm(); // illegal
|
||||
int y = x.spm(); // ok
|
||||
|
||||
int u = sx.pm(); // illegal
|
||||
int v = sx.spm(); // ok
|
||||
|
||||
pkg.SuperClass.pC obj1; // ok
|
||||
pkg.SuperClass.spC obj2; // ok
|
||||
|
||||
pkg.SuperClass.pI obj3; // ok
|
||||
pkg.SuperClass.spI obj4; // ok
|
||||
|
||||
Object o1 = (pkg.SuperClass.pC) null; // ok
|
||||
Object o2 = (pkg.SuperClass.spC) null; // ok
|
||||
|
||||
Object o3 = (pkg.SuperClass.pI) null; // ok
|
||||
Object o4 = (pkg.SuperClass.spI) null; // ok
|
||||
|
||||
class C1 extends pkg.SuperClass.pC {} // ok
|
||||
class C2 extends pkg.SuperClass.spC {} // ok
|
||||
|
||||
//interface I1 extends pkg.SuperClass.pI {}
|
||||
//interface I2 extends pkg.SuperClass.spI {}
|
||||
|
||||
// Not allowed in inner classes.
|
||||
// static { ... }
|
||||
|
||||
void m() {
|
||||
|
||||
pkg.SuperClass lx = new pkg.SuperClass();
|
||||
|
||||
x.pi = 1; // illegal
|
||||
x.spi = 2; // ok
|
||||
|
||||
sx.pi = 1; // illegal
|
||||
sx.spi = 2; // ok
|
||||
|
||||
lx.pi = 1; // illegal
|
||||
lx.spi = 2; // ok
|
||||
|
||||
int t = x.pm(); // illegal
|
||||
int y = x.spm(); // ok
|
||||
|
||||
int u = sx.pm(); // illegal
|
||||
int v = sx.spm(); // ok
|
||||
|
||||
int w = lx.pm(); // illegal
|
||||
int z = lx.spm(); // ok
|
||||
|
||||
int i = x.pi; // illegal
|
||||
int j = x.spi; // ok
|
||||
|
||||
int n = sx.pi; // illegal
|
||||
int m = sx.spi; // ok
|
||||
|
||||
int k = lx.pi; // illegal
|
||||
int l = lx.spi; // ok
|
||||
|
||||
pkg.SuperClass.pC obj1; // ok
|
||||
pkg.SuperClass.spC obj2; // ok
|
||||
|
||||
pkg.SuperClass.pI obj3; // ok
|
||||
pkg.SuperClass.spI obj4; // ok
|
||||
|
||||
Object o1 = (pkg.SuperClass.pC) null; // ok
|
||||
Object o2 = (pkg.SuperClass.spC) null; // ok
|
||||
|
||||
Object o3 = (pkg.SuperClass.pI) null; // ok
|
||||
Object o4 = (pkg.SuperClass.spI) null; // ok
|
||||
|
||||
class C1 extends pkg.SuperClass.pC {} // ok
|
||||
class C2 extends pkg.SuperClass.spC {} // ok
|
||||
|
||||
//interface I1 extends pkg.SuperClass.pI {}
|
||||
//interface I2 extends pkg.SuperClass.spI {}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue