Skip to content

Commit

Permalink
Ignore invalid jars inside of the updates folder (Fixes #7751)
Browse files Browse the repository at this point in the history
This really needs a deeper look here, the way updates are handled is
fairly immature, but, this wasn't ever intended to be a large scale thing

Ideally, imho, we'd collect the list of update files into some form of Map,
that way we just have a reference of Name > File refs, and can filter out
cases where there are two versions of a plugin in there and warn expectidely,
but, that creates some complications, you would need to fall back to a dir
scan in the case of a plugin calling loadPlugin, but, it would at least
give us more defined behavior, as well as improve performance here vs
repeatidely trying to deserialise the plugin.yml defs for every file
in there on every load
  • Loading branch information
electronicboy committed Apr 20, 2022
1 parent c642d25 commit c7d4c01
Showing 1 changed file with 11 additions and 5 deletions.
16 changes: 11 additions & 5 deletions patches/api/0379-Update-Folder-Uses-Plugin-Name.patch
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Subject: [PATCH] Update Folder Uses Plugin Name


diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
index 42da20011544075a9bea63a12ae86f2f21720667..bea2e464861771383f8fcf143fa817340cb8ab1d 100644
index 42da20011544075a9bea63a12ae86f2f21720667..bab8bb3a52cdeef5f7052d4e3f404c42f37d117d 100644
--- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java
+++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
@@ -400,7 +400,7 @@ public final class SimplePluginManager implements PluginManager {
Expand All @@ -17,7 +17,7 @@ index 42da20011544075a9bea63a12ae86f2f21720667..bea2e464861771383f8fcf143fa81734

Set<Pattern> filters = fileAssociations.keySet();
Plugin result = null;
@@ -427,16 +427,50 @@ public final class SimplePluginManager implements PluginManager {
@@ -427,16 +427,56 @@ public final class SimplePluginManager implements PluginManager {
return result;
}

Expand All @@ -32,15 +32,21 @@ index 42da20011544075a9bea63a12ae86f2f21720667..bea2e464861771383f8fcf143fa81734
if (updateDirectory == null || !updateDirectory.isDirectory()) {
- return;
+ return file;
}
+ }
+ PluginLoader pluginLoader = getPluginLoader(file);
+ try {
+ String pluginName = pluginLoader.getPluginDescription(file).getName();
+ for (File updateFile : updateDirectory.listFiles()) {
+ if (!updateFile.isFile()) continue;
+ PluginLoader updatePluginLoader = getPluginLoader(updateFile);
+ if (updatePluginLoader == null) continue;
+ String updatePluginName = updatePluginLoader.getPluginDescription(updateFile).getName();
+ String updatePluginName;
+ try {
+ updatePluginName = updatePluginLoader.getPluginDescription(updateFile).getName();
+ // We failed to load this data for some reason, so, we'll skip over this
+ } catch (InvalidDescriptionException ex) {
+ continue;
+ }
+ if (!pluginName.equals(updatePluginName)) continue;
+ if (!FileUtil.copy(updateFile, file)) continue;
+ File newName = new File(file.getParentFile(), updateFile.getName());
Expand All @@ -51,7 +57,7 @@ index 42da20011544075a9bea63a12ae86f2f21720667..bea2e464861771383f8fcf143fa81734
+ }
+ catch (InvalidDescriptionException e) {
+ throw new InvalidPluginException(e);
+ }
}
+ return file;
+ }

Expand Down

0 comments on commit c7d4c01

Please sign in to comment.