The Minecraft Java Translation Crash
Breaking the text renderer with a simple formatting bug in translation strings.
The Minecraft Java Translation Crash
There is a client crash going around Minecraft Java Edition for a while now. It exploits how the game handles text translation and formatting.
Here is the main idea. The game has a translation system for converting keys like "menu.options" into your local language. This system also has basic formatting. The syntax "%1$s" means "take the first argument and format it as a string".
When the game sees this in a translation key, it looks into the "with" field for that first argument. The bug is this: the argument can be another translation object.
You can nest them. The game tries to resolve each one, getting deeper and deeper. It keeps building a bigger and bigger final string to display on screen. This takes up more and more memory until the game just stops. It crashes.
You are basically zip bombing the text renderer.
Here is the NBT data that triggers the crash. You can put it anywhere text is accepted, like a book, a sign, or an item name.
{translate:"%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s",with:
[{translate:"%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s",with:
[{translate:"%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s",with:
[{translate:"%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s",with:
[{translate:"%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s",with:
[{translate:"%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s",with:
[{translate:"%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s",with:
[{translate:"%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s",with:
[{translate:"%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s",with:
[{translate:"%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s",with:
[{translate:"%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s%1$s",with:
["0x1270x1270x1270x1270x1270x1270x127"]}]}]}]}]}]}]}]}]}]}The structure has ten layers of nesting. Each layer's "translate" field contains ten "%1$s" placeholders. The game tries to fill each one, causing exponential growth. The final "with" array at the deepest level contains that one string argument. This tiny seed triggers the whole thing.
This is a classic denial of service bug in a text parser. The fix is simple: the game should detect circular references or limit how deep it resolves these formatting arguments.
This is why input validation matters, even in a block game. It is all just code.