Placing a Block Entity with sufficiently long text causes chunk saving to fail, resulting in data corruption
The bug
The game doesn't stop block entities like signs or lecterns from storing text too long to save. This means that with some creative usage of the NBT or selector JSON components, a player can effectively corrupt a chunk by simply placing a sign/lectern.
Method to reproduce
- Grant yourself every advancement with /advancement grant @p everything
- Give yourself a sign with the damaging NBT with this command:
/give @p minecraft:oak_sign{BlockEntityTag:{Text1:'{"nbt":"","entity":"@p"}'}} - Place the sign, then reload the world
Stack traces
[05:35:27] [IO-Worker-34/ERROR]: Failed to store chunk [1, -1]
java.io.UTFDataFormatException: encoded string ({"text":...ts:0b}"}) too long: 84982 bytes
at java.io.DataOutputStream.writeUTF(DataOutputStream.java:369) ~[?:?]
at java.io.DataOutputStream.writeUTF(DataOutputStream.java:333) ~[?:?]
at ot.a(SourceFile:79) ~[minecraft-1.18.1-client.jar:?]
at oc.a(SourceFile:476) ~[minecraft-1.18.1-client.jar:?]
at oc.a(SourceFile:165) ~[minecraft-1.18.1-client.jar:?]
at oi.a(SourceFile:128) ~[minecraft-1.18.1-client.jar:?]
at oc.a(SourceFile:476) ~[minecraft-1.18.1-client.jar:?]
at oc.a(SourceFile:165) ~[minecraft-1.18.1-client.jar:?]
at om.a(SourceFile:118) ~[minecraft-1.18.1-client.jar:?]
at om.a(SourceFile:83) ~[minecraft-1.18.1-client.jar:?]
at crb.a(SourceFile:79) ~[minecraft-1.18.1-client.jar:?]
at cqy.a(SourceFile:174) ~[minecraft-1.18.1-client.jar:?]
at cqy.a(SourceFile:164) ~[minecraft-1.18.1-client.jar:?]
at aum$b.run(SourceFile:59) [minecraft-1.18.1-client.jar:?]
at auk.g(SourceFile:91) [minecraft-1.18.1-client.jar:?]
at auk.a(SourceFile:146) [minecraft-1.18.1-client.jar:?]
at auk.run(SourceFile:102) [minecraft-1.18.1-client.jar:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
at java.lang.Thread.run(Thread.java:833) [?:?]
[05:38:29] [IO-Worker-34/WARN]: Failed to read chunk [1, -1] z: Loading NBT data at oc.a(SourceFile:495) ~[minecraft-1.18.1-client.jar:?] at oc$1.a(SourceFile:71) ~[minecraft-1.18.1-client.jar:?] at oc$1.b(SourceFile:57) ~[minecraft-1.18.1-client.jar:?] at oi$1.a(SourceFile:42) ~[minecraft-1.18.1-client.jar:?] at oi$1.b(SourceFile:25) ~[minecraft-1.18.1-client.jar:?] at oc.a(SourceFile:489) ~[minecraft-1.18.1-client.jar:?] at oc$1.a(SourceFile:71) ~[minecraft-1.18.1-client.jar:?] at oc$1.b(SourceFile:57) ~[minecraft-1.18.1-client.jar:?] at om.a(SourceFile:131) ~[minecraft-1.18.1-client.jar:?] at om.a(SourceFile:75) ~[minecraft-1.18.1-client.jar:?] at om.a(SourceFile:71) ~[minecraft-1.18.1-client.jar:?] at crb.a(SourceFile:57) ~[minecraft-1.18.1-client.jar:?] at cqy.c(SourceFile:100) ~[minecraft-1.18.1-client.jar:?] at cqy.a(SourceFile:150) ~[minecraft-1.18.1-client.jar:?] at aum$b.run(SourceFile:59) [minecraft-1.18.1-client.jar:?] at auk.g(SourceFile:91) [minecraft-1.18.1-client.jar:?] at auk.a(SourceFile:146) [minecraft-1.18.1-client.jar:?] at auk.run(SourceFile:102) [minecraft-1.18.1-client.jar:?] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?] at java.lang.Thread.run(Thread.java:833) [?:?] Caused by: java.io.EOFException at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:346) ~[?:?] at java.io.DataInputStream.readUTF(DataInputStream.java:595) ~[?:?] at java.io.DataInputStream.readUTF(DataInputStream.java:570) ~[?:?] at ot$1.a(SourceFile:22) ~[minecraft-1.18.1-client.jar:?] at ot$1.b(SourceFile:16) ~[minecraft-1.18.1-client.jar:?] at oc.a(SourceFile:489) ~[minecraft-1.18.1-client.jar:?] ... 20 more [05:38:29] [Server thread/ERROR]: Couldn't load chunk [1, -1] java.util.concurrent.CompletionException: z: Loading NBT data at java.util.concurrent.CompletableFuture.reportJoin(CompletableFuture.java:413) ~[?:?] at java.util.concurrent.CompletableFuture.join(CompletableFuture.java:2118) ~[?:?] at cqy.a(SourceFile:84) ~[minecraft-1.18.1-client.jar:?] at cqw.f(SourceFile:79) ~[minecraft-1.18.1-client.jar:?] at acv.j(SourceFile:905) ~[minecraft-1.18.1-client.jar:?] at acv.m(SourceFile:557) ~[minecraft-1.18.1-client.jar:?] at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768) ~[?:?] at auh.c(SourceFile:151) ~[minecraft-1.18.1-client.jar:?] at adg$b.c(SourceFile:552) ~[minecraft-1.18.1-client.jar:?] at auh.y(SourceFile:125) ~[minecraft-1.18.1-client.jar:?] at adg$b.y(SourceFile:561) ~[minecraft-1.18.1-client.jar:?] at adg.d(SourceFile:282) ~[minecraft-1.18.1-client.jar:?] at net.minecraft.server.MinecraftServer.bf(SourceFile:768) ~[minecraft-1.18.1-client.jar:?] at net.minecraft.server.MinecraftServer.y(SourceFile:756) ~[minecraft-1.18.1-client.jar:?] at auh.c(SourceFile:134) ~[minecraft-1.18.1-client.jar:?] at net.minecraft.server.MinecraftServer.x(SourceFile:741) ~[minecraft-1.18.1-client.jar:?] at net.minecraft.server.MinecraftServer.b(SourceFile:499) ~[minecraft-1.18.1-client.jar:?] at net.minecraft.server.MinecraftServer.f_(SourceFile:330) ~[minecraft-1.18.1-client.jar:?] at fcv.e(SourceFile:72) ~[minecraft-1.18.1-client.jar:?] at net.minecraft.server.MinecraftServer.w(SourceFile:657) ~[minecraft-1.18.1-client.jar:?] at net.minecraft.server.MinecraftServer.a(SourceFile:270) ~[minecraft-1.18.1-client.jar:?] at java.lang.Thread.run(Thread.java:833) [?:?] Caused by: z: Loading NBT data at oc.a(SourceFile:495) ~[minecraft-1.18.1-client.jar:?] at oc$1.a(SourceFile:71) ~[minecraft-1.18.1-client.jar:?] at oc$1.b(SourceFile:57) ~[minecraft-1.18.1-client.jar:?] at oi$1.a(SourceFile:42) ~[minecraft-1.18.1-client.jar:?] at oi$1.b(SourceFile:25) ~[minecraft-1.18.1-client.jar:?] at oc.a(SourceFile:489) ~[minecraft-1.18.1-client.jar:?] at oc$1.a(SourceFile:71) ~[minecraft-1.18.1-client.jar:?] at oc$1.b(SourceFile:57) ~[minecraft-1.18.1-client.jar:?] at om.a(SourceFile:131) ~[minecraft-1.18.1-client.jar:?] at om.a(SourceFile:75) ~[minecraft-1.18.1-client.jar:?] at om.a(SourceFile:71) ~[minecraft-1.18.1-client.jar:?] at crb.a(SourceFile:57) ~[minecraft-1.18.1-client.jar:?] at cqy.c(SourceFile:100) ~[minecraft-1.18.1-client.jar:?] at cqy.a(SourceFile:150) ~[minecraft-1.18.1-client.jar:?] at aum$b.run(SourceFile:59) ~[minecraft-1.18.1-client.jar:?] at auk.g(SourceFile:91) ~[minecraft-1.18.1-client.jar:?] at auk.a(SourceFile:146) ~[minecraft-1.18.1-client.jar:?] at auk.run(SourceFile:102) ~[minecraft-1.18.1-client.jar:?] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?] ... 1 more Caused by: java.io.EOFException at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:346) ~[?:?] at java.io.DataInputStream.readUTF(DataInputStream.java:595) ~[?:?] at java.io.DataInputStream.readUTF(DataInputStream.java:570) ~[?:?] at ot$1.a(SourceFile:22) ~[minecraft-1.18.1-client.jar:?] at ot$1.b(SourceFile:16) ~[minecraft-1.18.1-client.jar:?] at oc.a(SourceFile:489) ~[minecraft-1.18.1-client.jar:?] at oc$1.a(SourceFile:71) ~[minecraft-1.18.1-client.jar:?] at oc$1.b(SourceFile:57) ~[minecraft-1.18.1-client.jar:?] at oi$1.a(SourceFile:42) ~[minecraft-1.18.1-client.jar:?] at oi$1.b(SourceFile:25) ~[minecraft-1.18.1-client.jar:?] at oc.a(SourceFile:489) ~[minecraft-1.18.1-client.jar:?] at oc$1.a(SourceFile:71) ~[minecraft-1.18.1-client.jar:?] at oc$1.b(SourceFile:57) ~[minecraft-1.18.1-client.jar:?] at om.a(SourceFile:131) ~[minecraft-1.18.1-client.jar:?] at om.a(SourceFile:75) ~[minecraft-1.18.1-client.jar:?] at om.a(SourceFile:71) ~[minecraft-1.18.1-client.jar:?] at crb.a(SourceFile:57) ~[minecraft-1.18.1-client.jar:?] at cqy.c(SourceFile:100) ~[minecraft-1.18.1-client.jar:?] at cqy.a(SourceFile:150) ~[minecraft-1.18.1-client.jar:?] at aum$b.run(SourceFile:59) ~[minecraft-1.18.1-client.jar:?] at auk.g(SourceFile:91) ~[minecraft-1.18.1-client.jar:?] at auk.a(SourceFile:146) ~[minecraft-1.18.1-client.jar:?] at auk.run(SourceFile:102) ~[minecraft-1.18.1-client.jar:?] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?] ... 1 more
2022-02-24, 12:39 PM
2022-05-30, 01:43 PM
2022-05-30, 01:43 PM
1
2
chunk, corruption, exploit, json, lectern, nbt, selector, sign, udfdataformatexception