From a694d2bc73547b41591191ec39ff2c6216fc6a99 Mon Sep 17 00:00:00 2001 From: LoveSy Date: Sun, 30 May 2021 15:18:13 +0800 Subject: [PATCH] [core] Check cast before returning from hooker (#696) --- .../java/de/robv/android/xposed/LspHooker.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/de/robv/android/xposed/LspHooker.java b/core/src/main/java/de/robv/android/xposed/LspHooker.java index 80b0f025..79f9b30f 100644 --- a/core/src/main/java/de/robv/android/xposed/LspHooker.java +++ b/core/src/main/java/de/robv/android/xposed/LspHooker.java @@ -20,17 +20,17 @@ package de.robv.android.xposed; +import java.lang.reflect.Executable; import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Member; import java.lang.reflect.Method; import java.lang.reflect.Modifier; public class LspHooker { private final XposedBridge.AdditionalHookInfo additionalInfo; - private final Member method; + private final Executable method; private final Method backup; - public LspHooker(XposedBridge.AdditionalHookInfo info, Member origin, Method backup) { + public LspHooker(XposedBridge.AdditionalHookInfo info, Executable origin, Method backup) { this.additionalInfo = info; this.method = origin; this.backup = backup; @@ -118,8 +118,15 @@ public class LspHooker { // return if (param.hasThrowable()) throw param.getThrowable(); - else - return param.getResult(); + else { + var result = param.getResult(); + if (method instanceof Method) { + var returnType = ((Method) method).getReturnType(); + if (!returnType.isPrimitive()) + return returnType.cast(result); + } + return result; + } } }