fix snbt decoding bug found in #121

This commit is contained in:
Tnze
2021-08-28 13:01:17 +08:00
parent 3b6f23f686
commit 57b0a6fdc6
3 changed files with 5 additions and 2 deletions

View File

@ -247,7 +247,7 @@ func writeListOrArray(e *Encoder, d *decodeState) (tagType byte, err error) {
}
break
}
if d.opcode != scanListValue { // TAG_List<TAG_String>
if d.opcode != scanListValue && d.opcode != scanEndValue { // TAG_List<TAG_String>
panic(phasePanicMsg)
}
var tagType byte

View File

@ -48,6 +48,9 @@ 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}},
// 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}},
}
func TestStringifiedMessage_TagType(t *testing.T) {

View File

@ -9,7 +9,7 @@ func TestSNBT_checkScanCode(t *testing.T) {
//t.SkipNow()
var s scanner
s.reset()
for _, c := range []byte(`[I;123,345], `) {
for _, c := range []byte(`{b:[vanilla],c:0D}`) {
t.Logf("[%c] - %d", c, s.step(&s, c))
}
t.Logf("[%c] - %d", ' ', s.eof())