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,437 @@
|
|||
/*
|
||||
* Copyright (c) 2013, 2026, 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 Data used for testing default/static method
|
||||
*
|
||||
* @author Yong Lu
|
||||
*/
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import static helper.Mod.*;
|
||||
import static helper.Declared.*;
|
||||
import helper.Mod;
|
||||
import helper.Declared;
|
||||
import java.lang.annotation.Repeatable;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF1.defaultMethod", mod = DEFAULT, declared = YES)
|
||||
interface TestIF1 {
|
||||
|
||||
default String defaultMethod() {
|
||||
return "TestIF1.defaultMethod";
|
||||
}
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF1.defaultMethod", mod = DEFAULT, declared = NO)
|
||||
class TestClass1 implements TestIF1 {
|
||||
}
|
||||
|
||||
@MethodDesc(name = "staticMethod", retval = "TestIF2.staticMethod", mod = STATIC, declared = YES)
|
||||
interface TestIF2 {
|
||||
|
||||
static String staticMethod() {
|
||||
return "TestIF2.staticMethod";
|
||||
}
|
||||
}
|
||||
|
||||
@MethodDesc(name = "method", retval = "TestIF2.staticMethod", mod = REGULAR, declared = YES)
|
||||
class TestClass2 implements TestIF2 {
|
||||
|
||||
public String method() {
|
||||
return TestIF2.staticMethod();
|
||||
}
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF3.defaultMethod", mod = DEFAULT, declared = YES)
|
||||
@MethodDesc(name = "method", retval = "", mod = ABSTRACT, declared = YES)
|
||||
interface TestIF3 {
|
||||
|
||||
String method();
|
||||
|
||||
default String defaultMethod() {
|
||||
return "TestIF3.defaultMethod";
|
||||
}
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF3.defaultMethod", mod = DEFAULT, declared = NO)
|
||||
@MethodDesc(name = "method", retval = "TestClass3.method", mod = REGULAR, declared = YES)
|
||||
class TestClass3 implements TestIF3 {
|
||||
|
||||
public String method() {
|
||||
return "TestClass3.method";
|
||||
}
|
||||
}
|
||||
|
||||
@MethodDesc(name = "staticMethod", retval = "TestIF4.staticMethod", mod = STATIC, declared = YES)
|
||||
@MethodDesc(name = "method", retval = "", mod = ABSTRACT, declared = YES)
|
||||
interface TestIF4 {
|
||||
|
||||
String method();
|
||||
|
||||
static String staticMethod() {
|
||||
return "TestIF4.staticMethod";
|
||||
}
|
||||
}
|
||||
|
||||
@MethodDesc(name = "method", retval = "TestClass4.method", mod = REGULAR, declared = YES)
|
||||
class TestClass4 implements TestIF4 {
|
||||
|
||||
public String method() {
|
||||
return "TestClass4.method";
|
||||
}
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF5.defaultMethod", mod = DEFAULT, declared = YES)
|
||||
@MethodDesc(name = "staticMethod", retval = "TestIF5.staticMethod", mod = STATIC, declared = YES)
|
||||
interface TestIF5 {
|
||||
|
||||
default String defaultMethod() {
|
||||
return "TestIF5.defaultMethod";
|
||||
}
|
||||
|
||||
static String staticMethod() {
|
||||
return "TestIF5.staticMethod";
|
||||
}
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF5.defaultMethod", mod = DEFAULT, declared = NO)
|
||||
class TestClass5 implements TestIF5 {
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF6.defaultMethod", mod = DEFAULT, declared = YES)
|
||||
@MethodDesc(name = "staticMethod", retval = "TestIF6.staticMethod", mod = STATIC, declared = YES)
|
||||
@MethodDesc(name = "method", retval = "", mod = ABSTRACT, declared = YES)
|
||||
interface TestIF6 {
|
||||
|
||||
String method();
|
||||
|
||||
default String defaultMethod() {
|
||||
return "TestIF6.defaultMethod";
|
||||
}
|
||||
|
||||
static String staticMethod() {
|
||||
return "TestIF6.staticMethod";
|
||||
}
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF6.defaultMethod", mod = DEFAULT, declared = NO)
|
||||
@MethodDesc(name = "method", retval = "TestClass6.method", mod = REGULAR, declared = YES)
|
||||
class TestClass6 implements TestIF6 {
|
||||
|
||||
public String method() {
|
||||
return "TestClass6.method";
|
||||
}
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF7.TestClass7", mod = DEFAULT, declared = YES)
|
||||
interface TestIF7<T> {
|
||||
|
||||
default T defaultMethod(T t) {
|
||||
return t;
|
||||
}
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF7.TestClass7", mod = DEFAULT, declared = NO)
|
||||
class TestClass7<T> implements TestIF7<T> {
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF8.TestClass8", mod = DEFAULT, declared = YES)
|
||||
interface TestIF8<E> {
|
||||
|
||||
default <E> E defaultMethod(E e) {
|
||||
return e;
|
||||
}
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF8.TestClass8", mod = DEFAULT, declared = NO)
|
||||
class TestClass8<T> implements TestIF8<T> {
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF9.defaultMethod", mod = DEFAULT, declared = YES)
|
||||
interface TestIF9 extends TestIF1 {
|
||||
|
||||
default String defaultMethod() {
|
||||
return "TestIF9.defaultMethod";
|
||||
}
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF9.defaultMethod", mod = DEFAULT, declared = NO)
|
||||
class TestClass9 implements TestIF9 {
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF9.defaultMethod", mod = DEFAULT, declared = NO)
|
||||
@MethodDesc(name = "method", retval = "TestIF9.defaultMethod", mod = REGULAR, declared = YES)
|
||||
class TestClass91 implements TestIF9, TestIF1 {
|
||||
|
||||
public String method() {
|
||||
return defaultMethod();
|
||||
}
|
||||
}
|
||||
|
||||
@MethodDesc(name = "staticMethod", retval = "TestIF10.staticMethod", mod = STATIC, declared = YES)
|
||||
interface TestIF10 extends TestIF2 {
|
||||
|
||||
static String staticMethod() {
|
||||
|
||||
return "TestIF10.staticMethod";
|
||||
}
|
||||
}
|
||||
|
||||
@MethodDesc(name = "staticMethod", retval = "TestIF11.staticMethod", mod = STATIC, declared = YES)
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF1.defaultMethod", mod = DEFAULT, declared = NO)
|
||||
interface TestIF11 extends TestIF1 {
|
||||
|
||||
static String staticMethod() {
|
||||
return "TestIF11.staticMethod";
|
||||
}
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF1.defaultMethod", mod = DEFAULT, declared = NO)
|
||||
class TestClass11 implements TestIF11 {
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF12.defaultMethod", mod = DEFAULT, declared = YES)
|
||||
interface TestIF12 extends TestIF2 {
|
||||
|
||||
default String defaultMethod() {
|
||||
return "TestIF12.defaultMethod";
|
||||
}
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF12.defaultMethod", mod = DEFAULT, declared = NO)
|
||||
class TestClass12 implements TestIF12 {
|
||||
}
|
||||
|
||||
//Diamond Case
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF1.defaultMethod", mod = DEFAULT, declared = NO)
|
||||
interface TestIF1A extends TestIF1 {
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF1.defaultMethod", mod = DEFAULT, declared = NO)
|
||||
interface TestIF1B extends TestIF1 {
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF1.defaultMethod", mod = DEFAULT, declared = NO)
|
||||
class TestClass13 implements TestIF1A, TestIF1B {
|
||||
}
|
||||
|
||||
//Diamond Override Case
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF1C.defaultMethod", mod = DEFAULT, declared = YES)
|
||||
interface TestIF1C extends TestIF1 {
|
||||
|
||||
default String defaultMethod() {
|
||||
return "TestIF1C.defaultMethod";
|
||||
}
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF1D.defaultMethod", mod = DEFAULT, declared = YES)
|
||||
interface TestIF1D extends TestIF1 {
|
||||
|
||||
default String defaultMethod() {
|
||||
return "TestIF1D.defaultMethod";
|
||||
}
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestClass14.defaultMethod", mod = REGULAR, declared = YES)
|
||||
class TestClass14 implements TestIF1C, TestIF1D {
|
||||
|
||||
public String defaultMethod() {
|
||||
return "TestClass14.defaultMethod";
|
||||
}
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "", mod = ABSTRACT, declared = YES)
|
||||
interface TestIF15 extends TestIF1 {
|
||||
|
||||
String defaultMethod();
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestClass15.defaultMethod", mod = REGULAR, declared = YES)
|
||||
class TestClass15 implements TestIF15 {
|
||||
|
||||
public String defaultMethod() {
|
||||
return "TestClass15.defaultMethod";
|
||||
}
|
||||
}
|
||||
|
||||
interface FuncInterface<T> {
|
||||
|
||||
String test(T t);
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF16.defaultMethod", mod = DEFAULT, declared = YES)
|
||||
interface TestIF16 {
|
||||
|
||||
default String defaultMethod() {
|
||||
FuncInterface<Object> fi = o -> o.toString();
|
||||
Object o = "TestIF16.defaultMethod";
|
||||
return fi.test(o);
|
||||
}
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF16.defaultMethod", mod = DEFAULT, declared = NO)
|
||||
class TestClass16 implements TestIF16 {
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF17.defaultMethod", mod = DEFAULT, declared = YES)
|
||||
@MethodDesc(name = "staticMethod", retval = "TestIF17.staticMethod", mod = STATIC, declared = YES)
|
||||
interface TestIF17 {
|
||||
|
||||
default String defaultMethod() {
|
||||
return staticMethod().replace("staticMethod", "defaultMethod");
|
||||
}
|
||||
|
||||
public static String staticMethod() {
|
||||
return "TestIF17.staticMethod";
|
||||
}
|
||||
}
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF17.defaultMethod", mod = DEFAULT, declared = NO)
|
||||
class TestClass17 implements TestIF17 {
|
||||
}
|
||||
|
||||
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF17.defaultMethod", mod = DEFAULT, declared = NO)
|
||||
class TestClass18 extends TestClass17 {
|
||||
}
|
||||
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Repeatable(MethodDescs.class)
|
||||
@interface MethodDesc {
|
||||
String name();
|
||||
String retval();
|
||||
Mod mod();
|
||||
Declared declared();
|
||||
}
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@interface MethodDescs {
|
||||
MethodDesc[] value();
|
||||
}
|
||||
|
||||
//Diamond Case for static method
|
||||
@MethodDesc(name = "staticMethod", retval = "TestIF2A.staticMethod", mod = STATIC, declared = YES)
|
||||
interface TestIF2A extends TestIF2 {
|
||||
static String staticMethod() {
|
||||
return "TestIF2A.staticMethod";
|
||||
}
|
||||
}
|
||||
|
||||
@MethodDesc(name = "method", retval = "", mod = ABSTRACT, declared = YES)
|
||||
interface TestIF2B extends TestIF2 {
|
||||
String method();
|
||||
}
|
||||
|
||||
@MethodDesc(name = "method", retval = "", mod = ABSTRACT, declared = YES)
|
||||
interface TestIF18 extends TestIF10, TestIF2A {
|
||||
String method();
|
||||
}
|
||||
|
||||
@MethodDesc(name = "method", retval = "", mod = ABSTRACT, declared = NO)
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF12.defaultMethod", mod = DEFAULT, declared = NO)
|
||||
interface TestIF19 extends TestIF12, TestIF2B {
|
||||
}
|
||||
|
||||
@MethodDesc(name = "staticMethod", retval = "TestIF20.staticMethod", mod = STATIC, declared = YES)
|
||||
@MethodDesc(name = "defaultMethod", retval = "TestIF12.defaultMethod", mod = DEFAULT, declared = NO)
|
||||
interface TestIF20 extends TestIF12, TestIF2A {
|
||||
static String staticMethod() {
|
||||
return "TestIF20.staticMethod";
|
||||
}
|
||||
}
|
||||
|
||||
@MethodDesc(name = "method", retval = "", mod = ABSTRACT, declared = NO)
|
||||
interface TestIF21 extends TestIF2A, TestIF2B {
|
||||
}
|
||||
|
||||
public class DefaultStaticTestData {
|
||||
|
||||
/**
|
||||
* Test data for DefaultStaticInvokeTest The format of inner array is: First
|
||||
* data is the name of the class under test Second data used in test as the
|
||||
* arguments used for the method call.
|
||||
*/
|
||||
static Object[][] testClasses() {
|
||||
return new Object[][]{
|
||||
{"TestClass1", null},
|
||||
{"TestClass2", null},
|
||||
{"TestClass3", null},
|
||||
{"TestClass4", null},
|
||||
{"TestClass5", null},
|
||||
{"TestClass6", null},
|
||||
{"TestClass7", "TestIF7.TestClass7"},
|
||||
{"TestClass8", "TestIF8.TestClass8"},
|
||||
{"TestClass9", null},
|
||||
{"TestClass91", null},
|
||||
{"TestClass11", null},
|
||||
{"TestClass12", null},
|
||||
{"TestClass13", null},
|
||||
{"TestClass14", null},
|
||||
{"TestClass15", null},
|
||||
{"TestClass16", null},
|
||||
{"TestClass17", null},
|
||||
{"TestClass18", null},
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Test data for DefaultStaticInvokeTest The format of inner array is: First
|
||||
* data is the name of the interface under test Second data used in test as
|
||||
* the arguments used for the method call.
|
||||
*/
|
||||
static Object[][] testInterfaces() {
|
||||
return new Object[][]{
|
||||
{"TestIF1", null},
|
||||
{"TestIF2", null},
|
||||
{"TestIF2A", null},
|
||||
{"TestIF2B", null},
|
||||
{"TestIF3", null},
|
||||
{"TestIF4", null},
|
||||
{"TestIF5", null},
|
||||
{"TestIF6", null},
|
||||
{"TestIF7", "TestIF7.TestClass7"},
|
||||
{"TestIF8", "TestIF8.TestClass8"},
|
||||
{"TestIF9", null},
|
||||
{"TestIF10", null},
|
||||
{"TestIF11", null},
|
||||
{"TestIF12", null},
|
||||
{"TestIF1A", null},
|
||||
{"TestIF1B", null},
|
||||
{"TestIF1C", null},
|
||||
{"TestIF1D", null},
|
||||
{"TestIF15", null},
|
||||
{"TestIF16", null},
|
||||
{"TestIF17", null},
|
||||
{"TestIF18", null},
|
||||
{"TestIF19", null},
|
||||
{"TestIF20", null},
|
||||
{"TestIF21", null},
|
||||
};
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue