diff --git a/core/src/main/cpp/main/include/logging.h b/core/src/main/cpp/main/include/logging.h index 2ad2b9bf..6d4be69e 100644 --- a/core/src/main/cpp/main/include/logging.h +++ b/core/src/main/cpp/main/include/logging.h @@ -35,11 +35,12 @@ #define LOGE(...) #else #ifndef NDEBUG -#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__) +#define LOGD(fmt, ...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, "%s:%d#%s" ": " fmt, __FILE_NAME__, __LINE__, __PRETTY_FUNCTION__ __VA_OPT__(,) __VA_ARGS__) +#define LOGV(fmt, ...) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, "%s:%d#%s" ": " fmt, __FILE_NAME__, __LINE__, __PRETTY_FUNCTION__ __VA_OPT__(,) __VA_ARGS__) #else #define LOGD(...) +#define LOGV(...) #endif -#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__) #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__) #define LOGW(...) __android_log_print(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__) #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__) diff --git a/core/src/main/java/org/lsposed/lspd/service/BridgeService.java b/core/src/main/java/org/lsposed/lspd/service/BridgeService.java index b6dfd109..f25e1d3b 100644 --- a/core/src/main/java/org/lsposed/lspd/service/BridgeService.java +++ b/core/src/main/java/org/lsposed/lspd/service/BridgeService.java @@ -99,7 +99,7 @@ public class BridgeService { @SuppressWarnings({"unused", "RedundantSuppression"}) public static boolean onTransact(@NonNull Parcel data, @Nullable Parcel reply, int flags) { - data.enforceInterface(DESCRIPTOR); + if (!ParcelUtils.safeEnforceInterface(data, DESCRIPTOR)) return false; ACTION action = ACTION.values()[data.readInt()]; @@ -174,9 +174,8 @@ public class BridgeService { } try { - String descriptor = ParcelUtils.readInterfaceDescriptor(data); - if (!"android.app.IActivityManager".equals(descriptor) && - !"com.sonymobile.hookservice.HookActivityService".equals(descriptor)) { + if (!ParcelUtils.safeEnforceInterface(data, "android.app.IActivityManager") && + !ParcelUtils.safeEnforceInterface(data, "com.sonymobile.hookservice.HookActivityService")) { return false; } return ActivityController.replaceActivityController(data); @@ -197,30 +196,23 @@ public class BridgeService { return false; } - boolean res = false; - try { - String descriptor = ParcelUtils.readInterfaceDescriptor(data); - data.setDataPosition(0); - if (descriptor.equals(DESCRIPTOR)) { - res = onTransact(data, reply, flags); + try { + return onTransact(data, reply, flags); + } catch (Exception e) { + if ((flags & IBinder.FLAG_ONEWAY) != 0) { + Log.w(TAG, "Caught a Exception from the binder stub implementation. ", e); + } else { + reply.setDataPosition(0); + reply.writeException(e); + } + Log.w(TAG, "on transact", e); + return true; } - } catch (Exception e) { - if ((flags & IBinder.FLAG_ONEWAY) != 0) { - Log.w(TAG, "Caught a Exception from the binder stub implementation. " + Log.getStackTraceString(e)); - } else { - reply.setDataPosition(0); - reply.writeException(e); - } - res = true; - } - - if (res) { + } finally { data.recycle(); reply.recycle(); } - - return res; } @SuppressWarnings("unused") diff --git a/core/src/main/java/org/lsposed/lspd/service/ParcelUtils.java b/core/src/main/java/org/lsposed/lspd/service/ParcelUtils.java index f7d1a5d1..560c8bec 100644 --- a/core/src/main/java/org/lsposed/lspd/service/ParcelUtils.java +++ b/core/src/main/java/org/lsposed/lspd/service/ParcelUtils.java @@ -20,22 +20,18 @@ package org.lsposed.lspd.service; import android.annotation.SuppressLint; -import android.os.Build; import android.os.Parcel; import java.lang.reflect.Method; public class ParcelUtils { - - public static String readInterfaceDescriptor(Parcel parcel) { - parcel.readInt(); - if (Build.VERSION.SDK_INT >= 29) { - parcel.readInt(); + public static boolean safeEnforceInterface(Parcel parcel, String descriptor) { + try { + parcel.enforceInterface(descriptor); + return true; + } catch (Throwable e) { + return false; } - if (Build.VERSION.SDK_INT >= 30) { - parcel.readInt(); - } - return parcel.readString(); } private static Method obtainMethod;