Skip to content

Commit 7700fd9

Browse files
committedJul 31, 2019
Fix handling of extended interfaces in Java.registerClass()
1 parent 191de7c commit 7700fd9

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed
 

‎lib/class-factory.js

+11-1
Original file line numberDiff line numberDiff line change
@@ -1780,6 +1780,7 @@ function ClassFactory (vm) {
17801780

17811781
const localHandles = [];
17821782
try {
1783+
const Class = factory.use('java.lang.Class');
17831784
const Method = env.javaLangReflectMethod();
17841785
const invokeObjectMethodNoArgs = env.vaMethod('pointer', []);
17851786

@@ -1796,9 +1797,18 @@ function ClassFactory (vm) {
17961797
methods: dexMethods
17971798
};
17981799

1800+
const allInterfaces = interfaces.slice();
1801+
interfaces.forEach(iface => {
1802+
Array.prototype.slice.call(iface.class.getInterfaces())
1803+
.forEach(baseIface => {
1804+
const baseIfaceName = Java.cast(baseIface, Class).getCanonicalName();
1805+
allInterfaces.push(factory.use(baseIfaceName));
1806+
});
1807+
});
1808+
17991809
const baseMethods = {};
18001810
const pendingOverloads = {};
1801-
interfaces.forEach(iface => {
1811+
allInterfaces.forEach(iface => {
18021812
const ifaceHandle = iface.$getClassHandle(env);
18031813
localHandles.push(ifaceHandle);
18041814

‎test/re/frida/ClassCreationTest.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -287,11 +287,10 @@ public void extendingClassCanInvokeSuperMethod() throws ClassNotFoundException,
287287
// Issue #124
288288
@Test
289289
public void derivedInterfaceCanBeImplemented() throws ClassNotFoundException, InstantiationException, IllegalAccessException {
290-
loadScript("var Eatable = Java.use('re.frida.Eatable');" +
291-
"var Fruit = Java.use('re.frida.Fruit');" +
290+
loadScript("var Fruit = Java.use('re.frida.Fruit');" +
292291
"var Orange = Java.registerClass({" +
293292
" name: 're.frida.Orange'," +
294-
" implements: [Fruit, Eatable]," +
293+
" implements: [Fruit]," +
295294
" methods: {" +
296295
" getName: function () {" +
297296
" return 'Orange';" +

0 commit comments

Comments
 (0)
Please sign in to comment.