Skip to content

SingleEntitySelector is buggy #137

@Rothes

Description

@Rothes

This is caused by unexpected param user passed.
To reproduce:

@Command("spectate <target>")
suspend fun spectate(sender: PlayerUser, @Argument("target") targetSelector: SingleEntitySelector)

if passed /spectate @e, which may returns multiple entities, and execute the command,

[ESU] An unhandled exception was thrown during command execution
java.lang.StringIndexOutOfBoundsException: Range [9, 0) out of bounds for length 11
        at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55) ~[?:?]
        at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52) ~[?:?]
        at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213) ~[?:?]
        at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210) ~[?:?]
        at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98) ~[?:?]
        at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromToIndex(Preconditions.java:112) ~[?:?]
        at java.base/jdk.internal.util.Preconditions.checkFromToIndex(Preconditions.java:349) ~[?:?]
        at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4937) ~[?:?]
        at java.base/java.lang.String.substring(String.java:2899) ~[?:?]
        at ESU-bukkit-0.12.3-dev.jar/org.incendo.cloud.context.CommandInput.difference(CommandInput.java:770) ~[ESU-bukkit-0.12.3-dev.jar:?]
        at ESU-bukkit-0.12.3-dev.jar/org.incendo.cloud.context.CommandInput.difference(CommandInput.java:785) ~[ESU-bukkit-0.12.3-dev.jar:?]
        at ESU-bukkit-0.12.3-dev.jar/org.incendo.cloud.context.ParsingContext.consumedInput(ParsingContext.java:131) ~[ESU-bukkit-0.12.3-dev.jar:?]
        at ESU-bukkit-0.12.3-dev.jar/org.incendo.cloud.CommandTree.lambda$parseArgument$12(CommandTree.java:595) ~[ESU-bukkit-0.12.3-dev.jar:?]
        at java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1171) ~[?:?]
        at java.base/java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:504) ~[?:?]
        at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:511) ~[?:?]
        at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1450) ~[?:?]
        at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:2019) ~[?:?]
        at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:187) ~[?:?]

occurs. This is because net.minecraft.commands.arguments.EntityArgument#parse(com.mojang.brigadier.StringReader, boolean) set cursor to 0 on any exceptions.

If add any param behind the SingleEntitySelector argument, no matter if it's legal, it leads to a dead lock.

[15:46:46 ERROR]: Current Thread: Server thread
[15:46:46 ERROR]:       PID: 53 | Suspended: false | Native: false | State: WAITING
[15:46:46 ERROR]:       Stack:
[15:46:46 ERROR]:               java.base@25/jdk.internal.misc.Unsafe.park(Native Method)
[15:46:46 ERROR]:               java.base@25/java.util.concurrent.locks.LockSupport.park(LockSupport.java:223)
[15:46:46 ERROR]:               java.base@25/java.util.concurrent.CompletableFuture$Signaller.block(CompletableFuture.java:1885)
[15:46:46 ERROR]:               java.base@25/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:4364)
[15:46:46 ERROR]:               java.base@25/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:4310)
[15:46:46 ERROR]:               java.base@25/java.util.concurrent.CompletableFuture.waitingGet(CompletableFuture.java:1919)
[15:46:46 ERROR]:               java.base@25/java.util.concurrent.CompletableFuture.join(CompletableFuture.java:2138)
[15:46:46 ERROR]:               ESU-bukkit-0.12.3-dev.jar//org.incendo.cloud.suggestion.SuggestionFactory.suggestImmediately(SuggestionFactory.java:80)
[15:46:46 ERROR]:               ESU-bukkit-0.12.3-dev.jar//org.incendo.cloud.bukkit.BukkitCommand.tabComplete(BukkitCommand.java:88)
[15:46:46 ERROR]:               org.bukkit.command.Command.tabComplete(Command.java:100)
[15:46:46 ERROR]:               io.papermc.paper.command.brigadier.bukkit.BukkitCommandNode$BukkitBrigSuggestionProvider.getSuggestions(BukkitCommandNode.java:109)
[15:46:46 ERROR]:               com.mojang.brigadier.tree.ArgumentCommandNode.listSuggestions(ArgumentCommandNode.java:71)
[15:46:46 ERROR]:               com.mojang.brigadier.CommandDispatcher.getCompletionSuggestions(CommandDispatcher.java:550)
[15:46:46 ERROR]:               com.mojang.brigadier.CommandDispatcher.getCompletionSuggestions(CommandDispatcher.java:530)
[15:46:46 ERROR]:               net.minecraft.server.network.ServerGamePacketListenerImpl.sendServerSuggestions(ServerGamePacketListenerImpl.java:904)
[15:46:46 ERROR]:               net.minecraft.server.network.ServerGamePacketListenerImpl.lambda$handleCustomCommandSuggestions0$2(ServerGamePacketListenerImpl.java:863)
[15:46:46 ERROR]:               net.minecraft.server.network.ServerGamePacketListenerImpl$$Lambda/0x0000000040e00400.run(Unknown Source)
[15:46:46 ERROR]:               net.minecraft.server.TickTask.run(TickTask.java:18)
[15:46:46 ERROR]:               net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:155)
[15:46:46 ERROR]:               net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:24)
[15:46:46 ERROR]:               net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1449)
[15:46:46 ERROR]:               net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:176)
[15:46:46 ERROR]:               net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:129)
[15:46:46 ERROR]:               net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1429)
[15:46:46 ERROR]:               net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1423)
[15:46:46 ERROR]:               net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:139)
[15:46:46 ERROR]:               net.minecraft.server.MinecraftServer.managedBlock(MinecraftServer.java:1380)
[15:46:46 ERROR]:               net.minecraft.server.MinecraftServer.waitUntilNextTick(MinecraftServer.java:1388)
[15:46:46 ERROR]:               net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1265)
[15:46:46 ERROR]:               net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:310)
[15:46:46 ERROR]:               net.minecraft.server.MinecraftServer$$Lambda/0x000000003f551c00.run(Unknown Source)
[15:46:46 ERROR]:               java.base@25/java.lang.Thread.runWith(Thread.java:1487)
[15:46:46 ERROR]:               java.base@25/java.lang.Thread.run(Thread.java:1474)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions