From de254fb1c6a183406d9aeff8082aba95624bf374 Mon Sep 17 00:00:00 2001 From: Tnze Date: Mon, 24 Apr 2023 01:29:20 +0800 Subject: [PATCH] Fix the issue of snbt decoding when TagList in TagCompound in TagList --- nbt/snbt_decode.go | 12 ++++++++++++ nbt/snbt_decode_test.go | 1 + 2 files changed, 13 insertions(+) diff --git a/nbt/snbt_decode.go b/nbt/snbt_decode.go index 06962d0..e4d5e7c 100644 --- a/nbt/snbt_decode.go +++ b/nbt/snbt_decode.go @@ -254,6 +254,12 @@ func writeListOrArray(e *Encoder, d *decodeState, writeTag bool, tagName string) return tagType, err } case scanBeginList: // TAG_List + if writeTag { + err = e.writeTag(TagList, tagName) + if err != nil { + return tagType, err + } + } var elemType byte for { if d.opcode == scanSkipSpace { @@ -291,6 +297,12 @@ func writeListOrArray(e *Encoder, d *decodeState, writeTag bool, tagName string) return } case scanBeginCompound: // TAG_List + if writeTag { + err = e.writeTag(TagList, tagName) + if err != nil { + return tagType, err + } + } for { if d.opcode == scanSkipSpace { d.scanWhile(scanSkipSpace) diff --git a/nbt/snbt_decode_test.go b/nbt/snbt_decode_test.go index 39b3e67..d9d10cb 100644 --- a/nbt/snbt_decode_test.go +++ b/nbt/snbt_decode_test.go @@ -50,6 +50,7 @@ var testCases = []testCase{ {`{d:[]}`, TagCompound, []byte{10, 0, 0, 9, 0, 1, 'd', 0, 0, 0, 0, 0, 0}}, {`{e:[]}`, TagCompound, []byte{10, 0, 0, 9, 0, 1, 'e', 0, 0, 0, 0, 0, 0}}, {`{f:[], g:[]}`, TagCompound, []byte{10, 0, 0, 9, 0, 1, 'f', 0, 0, 0, 0, 0, 9, 0, 1, 'g', 0, 0, 0, 0, 0, 0}}, + {`{a:[{b:3B}]}`, TagCompound, []byte{10, 0, 0, 9, 0, 1, 'a', 10, 0, 0, 0, 1, 1, 0, 1, 'b', 3, 0, 0}}, // issue#121 {`{a:[b],c:0B}`, TagCompound, []byte{10, 0, 0, 9, 0, 1, 'a', 8, 0, 0, 0, 1, 0, 1, 'b', 1, 0, 1, 'c', 0, 0}},