OpenNBT icon indicating copy to clipboard operation
OpenNBT copied to clipboard

SNBT Parsing

Open katietheqt-old opened this issue 1 year ago • 1 comments

It seems like the SNBT parser is very unreliable. Some inputs cause it to hang, and it returns incorrect data for other inputs.

For example, the perfectly valid SNBT {"a":{}} hangs the SNBT parser until it consumes all available Java heap space and throws an OutOfMemoryError, as in the below code:

InputStream is = new ByteArrayInputStream("{\"a\":{}}".getBytes(StandardCharsets.UTF_8));

try (SNBTIO.StringifiedNBTReader reader = new SNBTIO.StringifiedNBTReader(is)) {
    reader.readNextTag("");
} catch (IOException e) {
    // Input is a BAIS so this *should* never fail.
    throw new AssertionError(e);
}

katietheqt-old avatar Aug 26 '23 13:08 katietheqt-old

Hi, I think this is an issue with the SNBT reader when reading empty compound, list and string tags. I have a fix for these that works with this test, as well as a fixing floating number formatting, I've just forgotten to make pull requests for them. I'll see if I can get a pull request for those together later today.

booleanbyte avatar Aug 26 '23 13:08 booleanbyte