aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/api/0073-Add-workaround-for-plugins-modifying-the-parent-of-t.patch
diff options
context:
space:
mode:
authorNassim Jahnke <[email protected]>2023-12-05 18:33:18 +0100
committerNassim Jahnke <[email protected]>2023-12-05 18:33:18 +0100
commit8e8d6aeeb0381b0c648605238f5445a4b7b041f3 (patch)
treee686fa54547d5cc1e2e9c5494f02b83832371c12 /patches/api/0073-Add-workaround-for-plugins-modifying-the-parent-of-t.patch
parent2a1ace0cf289870e82d23cf6cbcd87493f26a188 (diff)
downloadPaper-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.patch115
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