diff options
author | Nassim Jahnke <[email protected]> | 2023-12-05 18:33:18 +0100 |
---|---|---|
committer | Nassim Jahnke <[email protected]> | 2023-12-05 18:33:18 +0100 |
commit | 8e8d6aeeb0381b0c648605238f5445a4b7b041f3 (patch) | |
tree | e686fa54547d5cc1e2e9c5494f02b83832371c12 /patches/api/0073-Add-workaround-for-plugins-modifying-the-parent-of-t.patch | |
parent | 2a1ace0cf289870e82d23cf6cbcd87493f26a188 (diff) | |
download | Paper-8e8d6aeeb0381b0c648605238f5445a4b7b041f3.tar.gz Paper-8e8d6aeeb0381b0c648605238f5445a4b7b041f3.zip |
Finish API
Diffstat (limited to 'patches/api/0073-Add-workaround-for-plugins-modifying-the-parent-of-t.patch')
-rw-r--r-- | patches/api/0073-Add-workaround-for-plugins-modifying-the-parent-of-t.patch | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/patches/api/0073-Add-workaround-for-plugins-modifying-the-parent-of-t.patch b/patches/api/0073-Add-workaround-for-plugins-modifying-the-parent-of-t.patch new file mode 100644 index 0000000000..3b10918fc8 --- /dev/null +++ b/patches/api/0073-Add-workaround-for-plugins-modifying-the-parent-of-t.patch @@ -0,0 +1,115 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Minecrell <[email protected]> +Date: Thu, 21 Sep 2017 19:41:20 +0200 +Subject: [PATCH] Add workaround for plugins modifying the parent of the plugin + logger + +Essentials uses a custom logger name ("Essentials") instead of the +plugin logger. Log messages are redirected to the plugin logger by +setting the parent of the "Essentials" logger to the plugin logger. + +With our changes, the plugin logger is now also called "Essentials", +resulting in an infinite loop. Make sure plugins can't change the +parent of the plugin logger to avoid this. + +diff --git a/src/main/java/com/destroystokyo/paper/utils/PaperPluginLogger.java b/src/main/java/com/destroystokyo/paper/utils/PaperPluginLogger.java +new file mode 100644 +index 0000000000000000000000000000000000000000..087ee57fe5485bc760fadd45a176d4d90a18f9f8 +--- /dev/null ++++ b/src/main/java/com/destroystokyo/paper/utils/PaperPluginLogger.java +@@ -0,0 +1,48 @@ ++package com.destroystokyo.paper.utils; ++ ++import io.papermc.paper.plugin.configuration.PluginMeta; ++import org.bukkit.plugin.PluginDescriptionFile; ++ ++import java.util.logging.Level; ++import java.util.logging.LogManager; ++import java.util.logging.Logger; ++import org.jetbrains.annotations.NotNull; ++ ++/** ++ * Prevents plugins (e.g. Essentials) from changing the parent of the plugin logger. ++ */ ++public class PaperPluginLogger extends Logger { ++ ++ @Deprecated(forRemoval = true) ++ @NotNull ++ public static Logger getLogger(@NotNull PluginDescriptionFile description) { ++ return getLogger((PluginMeta) description); ++ } ++ ++ @NotNull ++ public static Logger getLogger(@NotNull PluginMeta meta) { ++ Logger logger = new PaperPluginLogger(meta); ++ if (!LogManager.getLogManager().addLogger(logger)) { ++ // Disable this if it's going to happen across reloads anyways... ++ //logger.log(Level.WARNING, "Could not insert plugin logger - one was already found: {}", LogManager.getLogManager().getLogger(this.getName())); ++ logger = LogManager.getLogManager().getLogger(meta.getLoggerPrefix() != null ? meta.getLoggerPrefix() : meta.getName()); ++ } ++ ++ return logger; ++ } ++ ++ private PaperPluginLogger(@NotNull PluginMeta meta) { ++ super(meta.getLoggerPrefix() != null ? meta.getLoggerPrefix() : meta.getName(), null); ++ } ++ ++ @Override ++ public void setParent(@NotNull Logger parent) { ++ if (getParent() != null) { ++ warning("Ignoring attempt to change parent of plugin logger"); ++ } else { ++ this.log(Level.FINE, "Setting plugin logger parent to {0}", parent); ++ super.setParent(parent); ++ } ++ } ++ ++} +diff --git a/src/main/java/org/bukkit/plugin/java/JavaPlugin.java b/src/main/java/org/bukkit/plugin/java/JavaPlugin.java +index 7cd9f98c042dc2bb80876af35c755f81bef34651..5cd236965de12392d8c7aa81307c0ff1cc8673b1 100644 +--- a/src/main/java/org/bukkit/plugin/java/JavaPlugin.java ++++ b/src/main/java/org/bukkit/plugin/java/JavaPlugin.java +@@ -291,10 +291,10 @@ public abstract class JavaPlugin extends PluginBase { + .orElseThrow(); + } + public final void init(@NotNull PluginLoader loader, @NotNull Server server, @NotNull PluginDescriptionFile description, @NotNull File dataFolder, @NotNull File file, @NotNull ClassLoader classLoader) { +- init(server, description, dataFolder, file, classLoader, description); ++ init(server, description, dataFolder, file, classLoader, description, com.destroystokyo.paper.utils.PaperPluginLogger.getLogger(description)); + this.pluginMeta = description; + } +- public final void init(@NotNull Server server, @NotNull PluginDescriptionFile description, @NotNull File dataFolder, @NotNull File file, @NotNull ClassLoader classLoader, @Nullable io.papermc.paper.plugin.configuration.PluginMeta configuration) { ++ public final void init(@NotNull Server server, @NotNull PluginDescriptionFile description, @NotNull File dataFolder, @NotNull File file, @NotNull ClassLoader classLoader, @Nullable io.papermc.paper.plugin.configuration.PluginMeta configuration, @NotNull Logger logger) { + // Paper end + this.loader = DummyPluginLoaderImplHolder.INSTANCE; // Paper + this.server = server; +@@ -304,7 +304,7 @@ public abstract class JavaPlugin extends PluginBase { + this.classLoader = classLoader; + this.configFile = new File(dataFolder, "config.yml"); + this.pluginMeta = configuration; // Paper +- this.logger = Logger.getLogger(description.getPrefix() != null ? description.getPrefix() : description.getName()); // Paper - Handle plugin prefix in implementation ++ this.logger = logger; // Paper + } + + /** +diff --git a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java +index 74b6581a97a092c44a0876e7981ff8a8e6153100..d6d3e1332e51adc5611543b2a6689efa5921a9f2 100644 +--- a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java ++++ b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java +@@ -67,6 +67,7 @@ public final class PluginClassLoader extends URLClassLoader implements io.paperm + this.url = file.toURI().toURL(); + this.libraryLoader = libraryLoader; + ++ this.logger = com.destroystokyo.paper.utils.PaperPluginLogger.getLogger(description); // Paper - Register logger early + // Paper start + this.dependencyContext = dependencyContext; + this.classLoaderGroup = io.papermc.paper.plugin.provider.classloader.PaperClassLoaderStorage.instance().registerSpigotGroup(this); +@@ -262,7 +263,7 @@ public final class PluginClassLoader extends URLClassLoader implements io.paperm + pluginState = new IllegalStateException("Initial initialization"); + this.pluginInit = javaPlugin; + +- javaPlugin.init(null, org.bukkit.Bukkit.getServer(), description, dataFolder, file, this); // Paper ++ javaPlugin.init(org.bukkit.Bukkit.getServer(), description, dataFolder, file, this, description, this.logger); // Paper + } + + // Paper start |