Skip to content

Commit 769cbbd

Browse files
committed
fix(nbt): zero byte tag radix parsing
1 parent 2f48b6b commit 769cbbd

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

nbt/src/main/java/net/kyori/adventure/nbt/TagStringReader.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -332,16 +332,21 @@ private int extractRadix(final StringBuilder builder, final String original) {
332332
if (first == '+' || first == '-') {
333333
radixPrefixOffset = 1;
334334
}
335+
336+
// There should be more after '0b'/'0x', else it would be a regular byte tag or string
337+
if (builder.length() < 3 + radixPrefixOffset) {
338+
return DECIMAL_RADIX;
339+
}
340+
335341
if (original.startsWith("0b", radixPrefixOffset) || original.startsWith("0B", radixPrefixOffset)) {
336342
radix = BINARY_RADIX;
337343
} else if (original.startsWith("0x", radixPrefixOffset) || original.startsWith("0X", radixPrefixOffset)) {
338344
radix = HEX_RADIX;
339345
} else {
340-
radix = DECIMAL_RADIX;
341-
}
342-
if (radix != DECIMAL_RADIX) {
343-
builder.delete(radixPrefixOffset, 2 + radixPrefixOffset);
346+
return DECIMAL_RADIX;
344347
}
348+
// Remove the radix prefix
349+
builder.delete(radixPrefixOffset, 2 + radixPrefixOffset);
345350
return radix;
346351
}
347352

nbt/src/test/java/net/kyori/adventure/nbt/StringIOTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ void testByteTag() throws IOException {
135135
assertEquals("0b", this.tagToString(ByteBinaryTag.byteBinaryTag((byte) 0)));
136136
assertEquals("112b", this.tagToString(ByteBinaryTag.byteBinaryTag((byte) 112)));
137137

138+
assertEquals(ByteBinaryTag.byteBinaryTag((byte) 0), this.stringToTag("0b"));
138139
assertEquals(ByteBinaryTag.byteBinaryTag((byte) 12), this.stringToTag("12b"));
139140
assertEquals(ByteBinaryTag.byteBinaryTag((byte) 13), this.stringToTag("13B"));
140141
}

0 commit comments

Comments
 (0)