mojira.dev
MC-133529

Crash if having too many command parts - java.lang.StackOverflowError: charTyped event handler

The bug

When using a command with many parts (execute and a few hundred as @e)then the game instantly crashes. I think it is caused by trying to highlight all the syntax.

How to reproduce

Give yourself a command block and put the text from the

[media]

into it. Now when you try to put a space behind the execute the game crashes.

Crash report

1.13.1\: [^crash-2018-10-06_14.55.29-client.txt]

Description: charTyped event handler

java.lang.StackOverflowError: charTyped event handler
	at ds.a(SourceFile:130)
	at ds.s(SourceFile:420)
	at cb.a(SourceFile:100)
	at cb.parse(SourceFile:28)
	at com.mojang.brigadier.tree.ArgumentCommandNode.parse(ArgumentCommandNode.java:56)
	at com.mojang.brigadier.CommandDispatcher.parseNodes(CommandDispatcher.java:190)
	at com.mojang.brigadier.CommandDispatcher.parseNodes(CommandDispatcher.java:218)
	at com.mojang.brigadier.CommandDispatcher.parseNodes(CommandDispatcher.java:214)
	at com.mojang.brigadier.CommandDispatcher.parseNodes(CommandDispatcher.java:218)
	at com.mojang.brigadier.CommandDispatcher.parseNodes(CommandDispatcher.java:214)
	at com.mojang.brigadier.CommandDispatcher.parseNodes(CommandDispatcher.java:218)
	at com.mojang.brigadier.CommandDispatcher.parseNodes(CommandDispatcher.java:214)
	...

Attachments

Comments 10

I would like to request ownership of this report.

Can confirm in 1.17.1

Slightly shorter stacktrace this time:

java.lang.StackOverflowError: charTyped event handler
	at java.base/java.util.HashMap.putAll(HashMap.java:785)
	at com.mojang.brigadier.context.CommandContextBuilder.copy(CommandContextBuilder.java:73)
	at com.mojang.brigadier.CommandDispatcher.parseNodes(CommandDispatcher.java:361)
	at com.mojang.brigadier.CommandDispatcher.parseNodes(CommandDispatcher.java:388)
	at com.mojang.brigadier.CommandDispatcher.parseNodes(CommandDispatcher.java:392)
	at com.mojang.brigadier.CommandDispatcher.parseNodes(CommandDispatcher.java:388)
	at com.mojang.brigadier.CommandDispatcher.parseNodes(CommandDispatcher.java:392)
	[...]

Also note that the command block's contents is cleared after the crash

Affects 1.18.1. Note that since 1.18, the command block is no longer cleared, but returned to the state it was in before the space behind execute was entered.

Affects 1.18.2. Latest stacktrace:

java.lang.StackOverflowError: charTyped event handler
	at java.base/java.lang.invoke.DirectMethodHandle.allocateInstance(DirectMethodHandle.java:520)
	at fq.t(SourceFile:422)
	at dw.a(SourceFile:100)
	at dw.parse(SourceFile:28)
	at com.mojang.brigadier.tree.ArgumentCommandNode.parse(ArgumentCommandNode.java:59)
	at com.mojang.brigadier.CommandDispatcher.parseNodes(CommandDispatcher.java:365)
	at com.mojang.brigadier.CommandDispatcher.parseNodes(CommandDispatcher.java:392)
	at com.mojang.brigadier.CommandDispatcher.parseNodes(CommandDispatcher.java:388)
	at com.mojang.brigadier.CommandDispatcher.parseNodes(CommandDispatcher.java:392)
        [...]

Affects 1.19

java.lang.StackOverflowError: charTyped event handler
	at java.base/java.util.HashMap.hash(HashMap.java:338)
	at java.base/java.util.HashMap.getNode(HashMap.java:568)
	at java.base/java.util.LinkedHashMap.get(LinkedHashMap.java:441)
	at com.mojang.brigadier.tree.CommandNode.getRelevantNodes(CommandNode.java:161)
	at com.mojang.brigadier.CommandDispatcher.parseNodes(CommandDispatcher.java:357)
	at com.mojang.brigadier.CommandDispatcher.parseNodes(CommandDispatcher.java:388)
	at com.mojang.brigadier.CommandDispatcher.parseNodes(CommandDispatcher.java:392)
	[...]

The crash report also helpfully included a workaround:

// Don't do that.

Can confirm in 1.19.2.

[media]

Confirmed for 1.19.4.

Can confirm in 1.20.4

unused account

anthony cicinelli

(Unassigned)

Confirmed

Platform

Important

Crash

command, commands

Minecraft 1.13-pre8, Minecraft 1.13, Minecraft 1.13.1, Minecraft 1.13.2, Minecraft 19w08b, ..., 1.19.2, 23w04a, 1.19.4, 23w12a, 1.20.5

Retrieved