From 72599f70584e5eab8d63ccf6b991ba1e9cdf7e38 Mon Sep 17 00:00:00 2001 From: Tnze Date: Thu, 27 May 2021 01:03:52 +0800 Subject: [PATCH] fix TAG_List --- nbt/snbt_decode.go | 11 +++++++++-- nbt/snbt_decode_test.go | 2 +- nbt/snbt_scanner_test.go | 2 +- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/nbt/snbt_decode.go b/nbt/snbt_decode.go index c6c000d..1b26706 100644 --- a/nbt/snbt_decode.go +++ b/nbt/snbt_decode.go @@ -159,23 +159,30 @@ func writeListOrArray(e *Encoder, d *decodeState, tagName string) error { case scanBeginList: // TAG_List case scanBeginCompound: // TAG_List for { - d.scanWhile(scanSkipSpace) + if d.opcode == scanSkipSpace { + d.scanWhile(scanSkipSpace) + } if d.opcode != scanBeginCompound { return errors.New("different TagType in List") } writeCompoundPayload(e2, d) count++ - // read ',' or ']' if d.opcode == scanSkipSpace { d.scanWhile(scanSkipSpace) } + // read ',' or ']' d.scanNext() + if d.opcode == scanSkipSpace { + d.scanWhile(scanSkipSpace) + } if d.opcode == scanEndValue { break } if d.opcode != scanListValue { panic(phasePanicMsg) } + // read '{' + d.scanNext() } e.writeListHeader(TagCompound, tagName, count) e.w.Write(buf.Bytes()) diff --git a/nbt/snbt_decode_test.go b/nbt/snbt_decode_test.go index 83b1889..8b0aeab 100644 --- a/nbt/snbt_decode_test.go +++ b/nbt/snbt_decode_test.go @@ -38,7 +38,7 @@ func TestEncoder_WriteSNBT(t *testing.T) { for i := range testCases { buf.Reset() if err := e.WriteSNBT(testCases[i].snbt); err != nil { - t.Error(err) + t.Errorf("Convert SNBT %q error: %v", testCases[i].snbt, err) continue } want := testCases[i].nbt diff --git a/nbt/snbt_scanner_test.go b/nbt/snbt_scanner_test.go index 5810724..ddbb675 100644 --- a/nbt/snbt_scanner_test.go +++ b/nbt/snbt_scanner_test.go @@ -9,7 +9,7 @@ func TestSNBT_checkScanCode(t *testing.T) { //t.SkipNow() var s scanner s.reset() - for _, c := range []byte(`[I;1,2,3]`) { + for _, c := range []byte(`[{},{a:1b},{}]`) { t.Logf("[%c] - %d", c, s.step(c)) } t.Logf("[%c] - %d", ' ', s.eof())