From eeacd4f7d010547f1ff8cd7819809b9865e4e0ac Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Fri, 14 Apr 2023 23:55:56 +0800 Subject: [PATCH] Modify add loggerForUnprocessableDataByFirstElement function in YukiHookDataChannel --- .../hook/xposed/channel/YukiHookDataChannel.kt | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.kt index 44a6b88e..519b92a8 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.kt @@ -596,6 +596,14 @@ class YukiHookDataChannel private constructor() { "If you want to lift this restriction, use the allowSendTooLargeData function when calling, " + "but this may cause the app crash" ) + + /** + * 如果数据过大且无法分段打印错误信息 (首元素超出 - 分段数组内容为空) + * @param name 数据类型名称 + */ + fun loggerForUnprocessableDataByFirstElement(name: String) = loggerForUnprocessableData( + suggestionMessage = "Failed to segment $name type because the size of its first element has exceeded the maximum limit" + ) when { wrapper.isSegmentsType || isAllowSendTooLargeData -> pushReceiver(wrapper) dataByteSize >= receiverDataMaxByteSize -> when (wrapper.instance.value) { @@ -613,7 +621,7 @@ class YukiHookDataChannel private constructor() { loggerForTooLargeData(name = "List", segments.size) segments.takeIf { it.isNotEmpty() }?.forEachIndexed { p, it -> pushReceiver(ChannelData(wrapper.instance.key, it).toWrapper(wrapperId, segments.size, p)) - } + } ?: loggerForUnprocessableDataByFirstElement(name = "List") } is Map<*, *> -> (wrapper.instance.value as Map<*, *>).also { value -> val segments = arrayListOf>() @@ -629,7 +637,7 @@ class YukiHookDataChannel private constructor() { loggerForTooLargeData(name = "Map", segments.size) segments.takeIf { it.isNotEmpty() }?.forEachIndexed { p, it -> pushReceiver(ChannelData(wrapper.instance.key, it).toWrapper(wrapperId, segments.size, p)) - } + } ?: loggerForUnprocessableDataByFirstElement(name = "Map") } is Set<*> -> (wrapper.instance.value as Set<*>).also { value -> val segments = arrayListOf>() @@ -645,7 +653,7 @@ class YukiHookDataChannel private constructor() { loggerForTooLargeData(name = "Set", segments.size) segments.takeIf { it.isNotEmpty() }?.forEachIndexed { p, it -> pushReceiver(ChannelData(wrapper.instance.key, it).toWrapper(wrapperId, segments.size, p)) - } + } ?: loggerForUnprocessableDataByFirstElement(name = "Set") } is String -> (wrapper.instance.value as String).also { value -> /** 由于字符会被按照双字节计算 - 所以这里将限制字节大小除以 2 */ @@ -659,7 +667,7 @@ class YukiHookDataChannel private constructor() { loggerForTooLargeData(name = "String", segments.size) segments.takeIf { it.isNotEmpty() }?.forEachIndexed { p, it -> pushReceiver(ChannelData(wrapper.instance.key, it).toWrapper(wrapperId, segments.size, p)) - } + } ?: loggerForUnprocessableDataByFirstElement(name = "String") } is ByteArray, is CharArray, is ShortArray, is IntArray, is LongArray, is FloatArray,