89d51d5f29
Because this exploit has been widely known for years and has not been fixed by Mojang, we decided that it was worth allowing people to toggle it on/off due to how easy it is to make it configurable. It should be noted that this decision does not promise all future exploits will be configurable.
28 Zeilen
1.5 KiB
Diff
28 Zeilen
1.5 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
|
Date: Tue, 8 Aug 2023 17:29:33 -0700
|
|
Subject: [PATCH] Fix race condition on UpgradeData.BlockFixers class init
|
|
|
|
The CHUNKY_FIXERS field is modified during the constructors
|
|
of the BlockFixers, but the code that uses CHUNKY_FIXERS does
|
|
not properly ensure that BlockFixers has been initialised before
|
|
using it, leading to a possible race condition where instances of
|
|
BlockFixers are accessed before they have initialised correctly.
|
|
|
|
We can force the class to initialise fully before accessing the
|
|
field by calling any method on the class, and for convenience
|
|
we use values().
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/level/chunk/UpgradeData.java b/src/main/java/net/minecraft/world/level/chunk/UpgradeData.java
|
|
index a5b90222cfad5b282f3f2db4dd5d1b201761fb72..4a2c233898c00e09a7e1b75d3a9a82b572b849d6 100644
|
|
--- a/src/main/java/net/minecraft/world/level/chunk/UpgradeData.java
|
|
+++ b/src/main/java/net/minecraft/world/level/chunk/UpgradeData.java
|
|
@@ -139,6 +139,7 @@ public class UpgradeData {
|
|
Fluid fluid = tick.type() == Fluids.EMPTY ? level.getFluidState(tick.pos()).getType() : tick.type();
|
|
level.scheduleTick(tick.pos(), fluid, tick.delay(), tick.priority());
|
|
});
|
|
+ UpgradeData.BlockFixers.values(); // Paper - force the class init so that we don't access CHUNKY_FIXERS before all BlockFixers are initialised
|
|
CHUNKY_FIXERS.forEach((logic) -> {
|
|
logic.processChunk(level);
|
|
});
|