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 -> {