Handle leading length for ByteArray.loadAs, fix deserialization problem with RequestPush. Fix #1991, #1899.

This commit is contained in:
Him188 2022-04-25 14:06:31 +01:00
parent 2780fc4761
commit e7dcf676fc
4 changed files with 147 additions and 64 deletions

View File

@ -1,10 +1,10 @@
/*
* Copyright 2019-2021 Mamoe Technologies and contributors.
* Copyright 2019-2022 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
*
* https://github.com/mamoe/mirai/blob/master/LICENSE
* https://github.com/mamoe/mirai/blob/dev/LICENSE
*/
@file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE", "unused")
@ -132,11 +132,11 @@ public fun ByteArray.toUInt(): UInt =
public fun ByteArray.toUShort(): UShort =
((this[0].toUInt().and(255u) shl 8) + (this[1].toUInt().and(255u) shl 0)).toUShort()
public fun ByteArray.toInt(): Int =
(this[0].toInt().and(255) shl 24) + (this[1].toInt().and(255) shl 16) + (this[2].toInt()
.and(255) shl 8) + (this[3].toInt().and(
255
) shl 0)
public fun ByteArray.toInt(offset: Int = 0): Int =
this[offset + 0].toInt().and(255).shl(24)
.plus(this[offset + 1].toInt().and(255).shl(16))
.plus(this[offset + 2].toInt().and(255).shl(8))
.plus(this[offset + 3].toInt().and(255).shl(0))
///////////////////////////////////////////////////////////////////////////

View File

@ -44,7 +44,64 @@ internal fun <T : JceStruct> ByteArray.loadWithUniPacket(
internal fun <T : JceStruct> ByteArray.loadAs(
deserializer: DeserializationStrategy<T>,
): T = this.read { readJceStruct(deserializer) }
offset: Int = 0,
length: Int = size - offset,
): T {
if (this.size >= 4) {
val possibleLength = this.toInt(offset = offset)
// return doLoadAs(deserializer, offset = offset + 4, length = possibleLength)
if (possibleLength == length || possibleLength == length - 4) {
return doLoadAs(
deserializer,
offset = offset + 4,
length = length - 4
)
}
}
return doLoadAs(deserializer, offset, length)
}
private fun <T : JceStruct> ByteArray.doLoadAs(
deserializer: DeserializationStrategy<T>,
offset: Int,
length: Int,
): T {
try {
return this.inputStream(offset = offset, length = length).asInput().use { input ->
Tars.UTF_8.load(deserializer, input)
}
} catch (originalException: Exception) {
val log = ByteArrayOutputStream()
try {
val value = PrintStream(log).use { stream ->
stream.println("\nData: ")
stream.println(this.toUHexString(offset = offset, length = length))
stream.println("Trace:")
this.inputStream(offset = offset, length = length).asInput().use { input ->
Tars.UTF_8.load(deserializer, input, debugLogger = DebugLogger(stream))
}
}
return value.also {
TarsDecoder.logger.warning(
contextualBugReportException(
"解析 " + deserializer.descriptor.serialName,
"启用 debug 模式后解析正常: $value \n\n${log.toByteArray().decodeToString()}",
originalException
)
)
}
} catch (secondFailure: Exception) {
throw contextualBugReportException(
"解析 " + deserializer.descriptor.serialName,
log.toByteArray().decodeToString(),
ExceptionCollector.compressExceptions(originalException, secondFailure)
)
}
}
}
internal fun <T : JceStruct> BytePacketBuilder.writeJceStruct(
serializer: SerializationStrategy<T>,
@ -54,61 +111,14 @@ internal fun <T : JceStruct> BytePacketBuilder.writeJceStruct(
}
internal fun <T : JceStruct> ByteReadPacket.readJceStruct(
serializer: DeserializationStrategy<T>,
deserializer: DeserializationStrategy<T>,
length: Int = this.remaining.toInt(),
): T {
if (JCE_DESERIALIZER_DEBUG) {
// since 2.11
this.useBytes(n = length) { data, arrayLength ->
try {
return data.inputStream(offset = 0, length = arrayLength).asInput().use { input ->
Tars.UTF_8.load(serializer, input)
}
} catch (originalException: Exception) {
val log = ByteArrayOutputStream()
try {
val value = PrintStream(log).use { stream ->
stream.println("\nData: ")
stream.println(data.toUHexString(length = arrayLength))
stream.println("Trace:")
data.inputStream(offset = 0, length = arrayLength).asInput().use { input ->
Tars.UTF_8.load(serializer, input, debugLogger = DebugLogger(stream))
}
}
return value.also {
TarsDecoder.logger.warning(
contextualBugReportException(
"解析 " + serializer.descriptor.serialName,
"启用 debug 模式后解析正常: $value \n\n${log.toByteArray().decodeToString()}",
originalException
)
)
}
} catch (secondFailure: Exception) {
throw contextualBugReportException(
"解析 " + serializer.descriptor.serialName,
log.toByteArray().decodeToString(),
ExceptionCollector.compressExceptions(originalException, secondFailure)
)
}
}
}
} else {
// since 2.0
return this.readPacketExact(length).use {
Tars.UTF_8.load(serializer, it)
}
return this.useBytes(n = length) { data, arrayLength ->
data.loadAs(deserializer, offset = 0, length = arrayLength)
}
}
/**
* @since 2.11
*/
internal var JCE_DESERIALIZER_DEBUG by lateinitMutableProperty {
systemProp("mirai.jce.deserializer.debug", false)
}
internal fun <T : JceStruct> BytePacketBuilder.writeJceRequestPacket(
version: Int = 3,
servantName: String,

View File

@ -0,0 +1,77 @@
/*
* Copyright 2019-2022 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
*
* https://github.com/mamoe/mirai/blob/dev/LICENSE
*/
package net.mamoe.mirai.internal.utils.io.serialization
import net.mamoe.mirai.internal.network.protocol.data.jce.PushReq
import net.mamoe.mirai.internal.network.protocol.data.jce.RequestPacket
import net.mamoe.mirai.internal.test.AbstractTest
import net.mamoe.mirai.utils.hexToBytes
import net.mamoe.mirai.utils.read
import org.junit.jupiter.api.Test
internal class ReadJceStructTest : AbstractTest() {
@Test
fun `ByteReadPacket readJceStruct`() {
"10 02 2C 3C 4C 56 23 51 51 53 65 72 76 69 63 65 2E 43 6F 6E 66 69 67 50 75 73 68 53 76 63 2E 4D 61 69 6E 53 65 72 76 61 6E 74 66 07 50 75 73 68 52 65 71 7D 00 01 03 A3 08 00 01 06 07 50 75 73 68 52 65 71 18 00 01 06 12 43 6F 6E 66 69 67 50 75 73 68 2E 50 75 73 68 52 65 71 1D 00 01 03 7B 0A 10 01 2D 00 01 03 6D 19 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 39 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 4C 5C 6C 70 01 89 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 99 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B A9 0C B9 0C C9 0C D9 0C EC FC 0F F6 10 00 FC 11 32 00 29 18 59 0B 8C 98 0C A8 0C"
.hexToBytes().read {
readJceStruct(RequestPacket.serializer())
}
}
@Test
fun `ByteReadPacket readJceStruct with rubbish length`() { // #1991
"00 00 03 E4 10 02 2C 3C 4C 56 23 51 51 53 65 72 76 69 63 65 2E 43 6F 6E 66 69 67 50 75 73 68 53 76 63 2E 4D 61 69 6E 53 65 72 76 61 6E 74 66 07 50 75 73 68 52 65 71 7D 00 01 03 A3 08 00 01 06 07 50 75 73 68 52 65 71 18 00 01 06 12 43 6F 6E 66 69 67 50 75 73 68 2E 50 75 73 68 52 65 71 1D 00 01 03 7B 0A 10 01 2D 00 01 03 6D 19 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 39 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 4C 5C 6C 70 01 89 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 99 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B A9 0C B9 0C C9 0C D9 0C EC FC 0F F6 10 00 FC 11 32 00 29 18 59 0B 8C 98 0C A8 0C"
.hexToBytes().read {
readJceStruct(RequestPacket.serializer())
}
}
@Test
fun `ByteReadPacket readUniPacket`() {
"10 02 2C 3C 4C 56 23 51 51 53 65 72 76 69 63 65 2E 43 6F 6E 66 69 67 50 75 73 68 53 76 63 2E 4D 61 69 6E 53 65 72 76 61 6E 74 66 07 50 75 73 68 52 65 71 7D 00 01 03 A3 08 00 01 06 07 50 75 73 68 52 65 71 18 00 01 06 12 43 6F 6E 66 69 67 50 75 73 68 2E 50 75 73 68 52 65 71 1D 00 01 03 7B 0A 10 01 2D 00 01 03 6D 19 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 39 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 4C 5C 6C 70 01 89 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 99 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B A9 0C B9 0C C9 0C D9 0C EC FC 0F F6 10 00 FC 11 32 00 29 18 59 0B 8C 98 0C A8 0C"
.hexToBytes().read {
readUniPacket(PushReq.serializer(), "PushReq")
}
}
@Test
fun `ByteReadPacket readUniPacket with rubbish length`() { // #1991
"00 00 03 E4 10 02 2C 3C 4C 56 23 51 51 53 65 72 76 69 63 65 2E 43 6F 6E 66 69 67 50 75 73 68 53 76 63 2E 4D 61 69 6E 53 65 72 76 61 6E 74 66 07 50 75 73 68 52 65 71 7D 00 01 03 A3 08 00 01 06 07 50 75 73 68 52 65 71 18 00 01 06 12 43 6F 6E 66 69 67 50 75 73 68 2E 50 75 73 68 52 65 71 1D 00 01 03 7B 0A 10 01 2D 00 01 03 6D 19 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 39 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 4C 5C 6C 70 01 89 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 99 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B A9 0C B9 0C C9 0C D9 0C EC FC 0F F6 10 00 FC 11 32 00 29 18 59 0B 8C 98 0C A8 0C"
.hexToBytes().read {
readUniPacket(PushReq.serializer(), "PushReq")
}
}
@Test
fun `ByteArray readJceStruct`() {
"10 02 2C 3C 4C 56 23 51 51 53 65 72 76 69 63 65 2E 43 6F 6E 66 69 67 50 75 73 68 53 76 63 2E 4D 61 69 6E 53 65 72 76 61 6E 74 66 07 50 75 73 68 52 65 71 7D 00 01 03 A3 08 00 01 06 07 50 75 73 68 52 65 71 18 00 01 06 12 43 6F 6E 66 69 67 50 75 73 68 2E 50 75 73 68 52 65 71 1D 00 01 03 7B 0A 10 01 2D 00 01 03 6D 19 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 39 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 4C 5C 6C 70 01 89 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 99 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B A9 0C B9 0C C9 0C D9 0C EC FC 0F F6 10 00 FC 11 32 00 29 18 59 0B 8C 98 0C A8 0C"
.hexToBytes().loadAs(RequestPacket.serializer())
}
@Test
fun `ByteArray readJceStruct with rubbish length`() { // #1991
"00 00 03 E4 10 02 2C 3C 4C 56 23 51 51 53 65 72 76 69 63 65 2E 43 6F 6E 66 69 67 50 75 73 68 53 76 63 2E 4D 61 69 6E 53 65 72 76 61 6E 74 66 07 50 75 73 68 52 65 71 7D 00 01 03 A3 08 00 01 06 07 50 75 73 68 52 65 71 18 00 01 06 12 43 6F 6E 66 69 67 50 75 73 68 2E 50 75 73 68 52 65 71 1D 00 01 03 7B 0A 10 01 2D 00 01 03 6D 19 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 39 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 4C 5C 6C 70 01 89 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 99 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B A9 0C B9 0C C9 0C D9 0C EC FC 0F F6 10 00 FC 11 32 00 29 18 59 0B 8C 98 0C A8 0C"
.hexToBytes().loadAs(RequestPacket.serializer())
}
@Test
fun `ByteArray readUniPacket`() {
"10 02 2C 3C 4C 56 23 51 51 53 65 72 76 69 63 65 2E 43 6F 6E 66 69 67 50 75 73 68 53 76 63 2E 4D 61 69 6E 53 65 72 76 61 6E 74 66 07 50 75 73 68 52 65 71 7D 00 01 03 A3 08 00 01 06 07 50 75 73 68 52 65 71 18 00 01 06 12 43 6F 6E 66 69 67 50 75 73 68 2E 50 75 73 68 52 65 71 1D 00 01 03 7B 0A 10 01 2D 00 01 03 6D 19 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 39 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 4C 5C 6C 70 01 89 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 99 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B A9 0C B9 0C C9 0C D9 0C EC FC 0F F6 10 00 FC 11 32 00 29 18 59 0B 8C 98 0C A8 0C"
.hexToBytes().loadWithUniPacket(PushReq.serializer(), "PushReq")
}
@Test
fun `ByteArray readUniPacket with rubbish length`() { // #1991
"00 00 03 E4 10 02 2C 3C 4C 56 23 51 51 53 65 72 76 69 63 65 2E 43 6F 6E 66 69 67 50 75 73 68 53 76 63 2E 4D 61 69 6E 53 65 72 76 61 6E 74 66 07 50 75 73 68 52 65 71 7D 00 01 03 A3 08 00 01 06 07 50 75 73 68 52 65 71 18 00 01 06 12 43 6F 6E 66 69 67 50 75 73 68 2E 50 75 73 68 52 65 71 1D 00 01 03 7B 0A 10 01 2D 00 01 03 6D 19 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 39 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 4C 5C 6C 70 01 89 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 99 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B A9 0C B9 0C C9 0C D9 0C EC FC 0F F6 10 00 FC 11 32 00 29 18 59 0B 8C 98 0C A8 0C"
.hexToBytes().loadWithUniPacket(PushReq.serializer(), "PushReq")
}
}

View File

@ -12,7 +12,6 @@ package net.mamoe.mirai.internal.utils.io.serialization.tars.internal
import kotlinx.serialization.Serializable
import net.mamoe.mirai.internal.test.AbstractTest
import net.mamoe.mirai.internal.utils.io.JceStruct
import net.mamoe.mirai.internal.utils.io.serialization.JCE_DESERIALIZER_DEBUG
import net.mamoe.mirai.internal.utils.io.serialization.readJceStruct
import net.mamoe.mirai.internal.utils.io.serialization.tars.Tars
import net.mamoe.mirai.internal.utils.io.serialization.tars.TarsId
@ -26,9 +25,6 @@ import kotlin.test.assertEquals
import kotlin.test.assertFails
class DebugLoggerTest : AbstractTest() {
init {
JCE_DESERIALIZER_DEBUG = true
}
fun String.uniteLine(): String = replace("\r\n", "\n").replace("\r", "\n")