From f48e27d7433385a5cd4215ea99a908cfa13dff53 Mon Sep 17 00:00:00 2001 From: Him188 <Him188@mamoe.net> Date: Thu, 19 Mar 2020 11:15:11 +0800 Subject: [PATCH] Fix map skipping, close #145 --- .../qqandroid/io/serialization/jce/JceInput.kt | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/io/serialization/jce/JceInput.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/io/serialization/jce/JceInput.kt index fe4b7524d..daf15274a 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/io/serialization/jce/JceInput.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/io/serialization/jce/JceInput.kt @@ -126,17 +126,23 @@ internal class JceInput( Jce.STRING1 -> this.input.discardExact(this.input.readUByte().toInt()) Jce.STRING4 -> this.input.discardExact(this.input.readInt()) Jce.MAP -> { // map - repeat(skipToHeadAndUseIfPossibleOrFail(0) { + nextHead() + repeat(skipToHeadAndUseIfPossibleOrFail(0, message = { "tag 0 not found when skipping map" }) { readJceIntValue(it) } * 2) { - useHead { skipField(it.type) } + val currentHead = currentHead + prepareNextHead() + skipField(currentHead.type) } } Jce.LIST -> { // list - repeat(skipToHeadAndUseIfPossibleOrFail(0) { + nextHead() + repeat(skipToHeadAndUseIfPossibleOrFail(0, message = { "tag 0 not found when skipping list" }) { readJceIntValue(it) }) { - useHead { skipField(it.type) } + val currentHead = currentHead + prepareNextHead() + skipField(currentHead.type) } } Jce.STRUCT_BEGIN -> {