From 1aafe78b779523c8c2f9eed7ebe321c0e0f05783 Mon Sep 17 00:00:00 2001 From: Him188 <Him188@mamoe.net> Date: Sun, 15 Dec 2019 15:53:29 +0800 Subject: [PATCH 1/3] Fix java.nio.BufferUnderflowException --- .../commonMain/kotlin/net.mamoe.mirai/utils/io/InputUtils.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/InputUtils.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/InputUtils.kt index 9a0917bd9..49a78aa06 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/InputUtils.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/InputUtils.kt @@ -67,7 +67,7 @@ fun Input.readTLVMap(expectingEOF: Boolean = false, tagSize: Int = 1): MutableMa 2 -> readUShort() else -> error("Unsupported tag size: $tagSize") } - } catch (e: EOFException) { + } catch (e: Exception) { // java.nio.BufferUnderflowException is not a EOFException... if (expectingEOF) { return map } @@ -79,7 +79,7 @@ fun Input.readTLVMap(expectingEOF: Boolean = false, tagSize: Int = 1): MutableMa check(!map.containsKey(type.toUInt())) { "Count not readTLVMap: duplicated key 0x${type.toUInt().toUHexString("")}. " + "map=$map" + - ", duplicating value=${this.readUShortLVByteArray()}" + + ", duplicating value=${this.readUShortLVByteArray().toUHexString()}" + ", remaining=" + if (expectingEOF) this.readBytes().toUHexString() else "[Not expecting EOF]" } try { From 1dda46d34c255afb0444e6b99aad5cdc3082e4ae Mon Sep 17 00:00:00 2001 From: Him188 <Him188@mamoe.net> Date: Sun, 15 Dec 2019 15:54:39 +0800 Subject: [PATCH 2/3] Add debugging prints for failed decodes --- .../network/protocol/tim/packet/event/MemberMute.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/event/MemberMute.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/event/MemberMute.kt index bc472a2d5..ceb838afb 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/event/MemberMute.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/event/MemberMute.kt @@ -11,6 +11,7 @@ import net.mamoe.mirai.contact.Group import net.mamoe.mirai.contact.Member import net.mamoe.mirai.getGroup import net.mamoe.mirai.qqAccount +import net.mamoe.mirai.utils.io.debugPrintIfFail import net.mamoe.mirai.utils.io.toUHexString // region mute @@ -126,7 +127,7 @@ internal object MemberMuteEventPacketParserAndHandler : KnownEventParserAndHandl Unknown0x02DCPacketFlag0x0EMaybeMutePacket } - 0x11u -> { + 0x11u -> debugPrintIfFail("解析禁言包(0x02DC)时"){ // 猜测这个失败是撤回?? discardExact(15) discardExact(2) val group = bot.getGroup(readUInt()) From 2812f2c1d366f21bacdd4f087087bbcab250d241 Mon Sep 17 00:00:00 2001 From: Him188 <Him188@mamoe.net> Date: Sun, 15 Dec 2019 15:56:05 +0800 Subject: [PATCH 3/3] Add remaining for debugging --- .../network/protocol/tim/packet/event/MemberMute.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/event/MemberMute.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/event/MemberMute.kt index ceb838afb..c929d9cbb 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/event/MemberMute.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/event/MemberMute.kt @@ -12,6 +12,7 @@ import net.mamoe.mirai.contact.Member import net.mamoe.mirai.getGroup import net.mamoe.mirai.qqAccount import net.mamoe.mirai.utils.io.debugPrintIfFail +import net.mamoe.mirai.utils.io.readRemainingBytes import net.mamoe.mirai.utils.io.toUHexString // region mute @@ -77,10 +78,12 @@ sealed class UnmuteEvent : EventOfMute() { // endregion -internal object Unknown0x02DCPacketFlag0x0EMaybeMutePacket : EventOfMute() { +internal class Unknown0x02DCPacketFlag0x0EMaybeMutePacket( + val remaining: ByteArray +) : EventOfMute() { override val operator: Member get() = error("Getting a field from Unknown0x02DCPacketFlag0x0EMaybeMutePacket") override val group: Group get() = error("Getting a field from Unknown0x02DCPacketFlag0x0EMaybeMutePacket") - override fun toString(): String = "Unknown0x02DCPacketFlag0x0EMaybeMutePacket" + override fun toString(): String = "Unknown0x02DCPacketFlag0x0EMaybeMutePacket(remaining=${remaining.toUHexString()})" } sealed class EventOfMute : EventPacket { @@ -124,7 +127,7 @@ internal object MemberMuteEventPacketParserAndHandler : KnownEventParserAndHandl 0x0Eu -> { //00 00 00 0E 00 08 00 02 00 01 00 // 0A 00 04 01 00 00 00 35 DB 60 A2 11 00 3E 08 07 20 A2 C1 ED AE 03 5A 34 08 A2 FF 8C F0 03 1A 19 08 F4 0E 10 FE 8C D3 EF 05 18 84 A1 F8 F9 06 20 00 28 00 30 A2 FF 8C F0 03 2A 0D 08 00 12 09 08 F4 0E 10 00 18 01 20 00 30 00 38 00 - Unknown0x02DCPacketFlag0x0EMaybeMutePacket + Unknown0x02DCPacketFlag0x0EMaybeMutePacket(readRemainingBytes()) } 0x11u -> debugPrintIfFail("解析禁言包(0x02DC)时"){ // 猜测这个失败是撤回??