Modify add loggerForUnprocessableDataByFirstElement function in YukiHookDataChannel

This commit is contained in:
2023-04-14 23:55:56 +08:00
parent 98d46a3d9e
commit eeacd4f7d0

View File

@@ -596,6 +596,14 @@ class YukiHookDataChannel private constructor() {
"If you want to lift this restriction, use the allowSendTooLargeData function when calling, " + "If you want to lift this restriction, use the allowSendTooLargeData function when calling, " +
"but this may cause the app crash" "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 { when {
wrapper.isSegmentsType || isAllowSendTooLargeData -> pushReceiver(wrapper) wrapper.isSegmentsType || isAllowSendTooLargeData -> pushReceiver(wrapper)
dataByteSize >= receiverDataMaxByteSize -> when (wrapper.instance.value) { dataByteSize >= receiverDataMaxByteSize -> when (wrapper.instance.value) {
@@ -613,7 +621,7 @@ class YukiHookDataChannel private constructor() {
loggerForTooLargeData(name = "List", segments.size) loggerForTooLargeData(name = "List", segments.size)
segments.takeIf { it.isNotEmpty() }?.forEachIndexed { p, it -> segments.takeIf { it.isNotEmpty() }?.forEachIndexed { p, it ->
pushReceiver(ChannelData(wrapper.instance.key, it).toWrapper(wrapperId, segments.size, p)) pushReceiver(ChannelData(wrapper.instance.key, it).toWrapper(wrapperId, segments.size, p))
} } ?: loggerForUnprocessableDataByFirstElement(name = "List")
} }
is Map<*, *> -> (wrapper.instance.value as Map<*, *>).also { value -> is Map<*, *> -> (wrapper.instance.value as Map<*, *>).also { value ->
val segments = arrayListOf<Map<*, *>>() val segments = arrayListOf<Map<*, *>>()
@@ -629,7 +637,7 @@ class YukiHookDataChannel private constructor() {
loggerForTooLargeData(name = "Map", segments.size) loggerForTooLargeData(name = "Map", segments.size)
segments.takeIf { it.isNotEmpty() }?.forEachIndexed { p, it -> segments.takeIf { it.isNotEmpty() }?.forEachIndexed { p, it ->
pushReceiver(ChannelData(wrapper.instance.key, it).toWrapper(wrapperId, segments.size, p)) pushReceiver(ChannelData(wrapper.instance.key, it).toWrapper(wrapperId, segments.size, p))
} } ?: loggerForUnprocessableDataByFirstElement(name = "Map")
} }
is Set<*> -> (wrapper.instance.value as Set<*>).also { value -> is Set<*> -> (wrapper.instance.value as Set<*>).also { value ->
val segments = arrayListOf<Set<*>>() val segments = arrayListOf<Set<*>>()
@@ -645,7 +653,7 @@ class YukiHookDataChannel private constructor() {
loggerForTooLargeData(name = "Set", segments.size) loggerForTooLargeData(name = "Set", segments.size)
segments.takeIf { it.isNotEmpty() }?.forEachIndexed { p, it -> segments.takeIf { it.isNotEmpty() }?.forEachIndexed { p, it ->
pushReceiver(ChannelData(wrapper.instance.key, it).toWrapper(wrapperId, segments.size, p)) pushReceiver(ChannelData(wrapper.instance.key, it).toWrapper(wrapperId, segments.size, p))
} } ?: loggerForUnprocessableDataByFirstElement(name = "Set")
} }
is String -> (wrapper.instance.value as String).also { value -> is String -> (wrapper.instance.value as String).also { value ->
/** 由于字符会被按照双字节计算 - 所以这里将限制字节大小除以 2 */ /** 由于字符会被按照双字节计算 - 所以这里将限制字节大小除以 2 */
@@ -659,7 +667,7 @@ class YukiHookDataChannel private constructor() {
loggerForTooLargeData(name = "String", segments.size) loggerForTooLargeData(name = "String", segments.size)
segments.takeIf { it.isNotEmpty() }?.forEachIndexed { p, it -> segments.takeIf { it.isNotEmpty() }?.forEachIndexed { p, it ->
pushReceiver(ChannelData(wrapper.instance.key, it).toWrapper(wrapperId, segments.size, p)) pushReceiver(ChannelData(wrapper.instance.key, it).toWrapper(wrapperId, segments.size, p))
} } ?: loggerForUnprocessableDataByFirstElement(name = "String")
} }
is ByteArray, is CharArray, is ShortArray, is ByteArray, is CharArray, is ShortArray,
is IntArray, is LongArray, is FloatArray, is IntArray, is LongArray, is FloatArray,