staticalyze object instanciation

This commit is contained in:
Jean-Marie 'Histausse' Mineau 2025-02-04 19:01:07 +01:00
parent 6b15bbf748
commit 5fdeb25682
Signed by: histausse
GPG key ID: B66AEEDA9B645AD2
3 changed files with 518 additions and 168 deletions

View file

@ -65,10 +65,11 @@ public class MainActivity extends Activity {
Class[] params = mth.getParameterTypes();
if (
mth.getName().equals("transfer") &&
ret == String.class &&
dec == Reflectee.class &&
mth.getReturnType() == String.class &&
mth.getDeclaringClass() == Reflectee.class &&
params.length == 1 &&
params[0] == String.class {
params[0] == String.class
) {
Log.e("[TEST]", "OK");
}
String newData = (String) mth.invoke(r, data);
@ -88,7 +89,13 @@ public class MainActivity extends Activity {
ClassLoader cl = MainActivity.class.getClassLoader();
Class clz = cl.loadClass("com.example.theseus.reflection.Reflectee");
Constructor cst = clz.getDeclaredConstructor(String.class);
Object r = cst.newInstance(data);
Object r;
Class[] args = cst.getParameterTypes();
if (args.length == 1 && args[0] == String.class && cst.getDeclaringClass() == Reflectee.class) {
r = new Reflectee(data);
} else {
r = cst.newInstance(data);
}
Method mth = clz.getMethod("transfer", String.class);
String newData = (String) mth.invoke(r, "");
Utils.sink(this, newData);
@ -106,7 +113,14 @@ public class MainActivity extends Activity {
String data = Utils.source("no reflect constr");
ClassLoader cl = MainActivity.class.getClassLoader();
Class clz = cl.loadClass("com.example.theseus.reflection.Reflectee");
Object r = clz.newInstance();
Object r;
if (
clz == Reflectee.class
) {
r = new Reflectee();
} else {
r = clz.newInstance();
}
Method mth = clz.getMethod("transfer", String.class);
String newData = (String) mth.invoke(r, data);
Utils.sink(this, newData);