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