KyoriPowered / adventure

A user-interface library, formerly known as text, for Minecraft: Java Edition
https://docs.advntr.dev/
MIT License
679 stars 104 forks source link

`MiniMessage::deserialize` throws `StringIndexOutOfBoundsException` when double quote is unclosed in tag argument (in lenient mode) #1011

Closed homchom closed 6 months ago

homchom commented 6 months ago

The documentation states that MiniMessage::deserialize should never throw by default, but when a double quote is left unclosed in the argument list of a tag (e.g. <hover:show_text_:">), a StringIndexOutOfBoundsException is thrown.

Here is the relevant stacktrace:

    at java.base/java.lang.String.substring(String.java:2709)
    at net.kyori.adventure.text.minimessage.internal.parser.TokenParser.unescape(TokenParser.java:620)
    at net.kyori.adventure.text.minimessage.internal.parser.node.TagPart.unquoteAndEscape(TagPart.java:109)
    at net.kyori.adventure.text.minimessage.internal.parser.node.TagPart.<init>(TagPart.java:53)
    at net.kyori.adventure.text.minimessage.internal.parser.match.StringResolvingMatchedTokenConsumer.accept(StringResolvingMatchedTokenConsumer.java:90)
    at net.kyori.adventure.text.minimessage.internal.parser.TokenParser.parseString(TokenParser.java:247)
    at net.kyori.adventure.text.minimessage.internal.parser.TokenParser.resolvePreProcessTags(TokenParser.java:112)
    at net.kyori.adventure.text.minimessage.MiniMessageParser.parseToTree(MiniMessageParser.java:195)