From 10430a21155aa976bc962f8d4c3f1a621d00f4ca Mon Sep 17 00:00:00 2001 From: itsTyrion Date: Thu, 8 Feb 2024 03:30:55 +0100 Subject: [PATCH] Validate plugin dependency IDs in accordance to plugin ID requirements (#1231) --- .../api/plugin/ap/PluginAnnotationProcessor.java | 11 +++++++++++ .../proxy/plugin/loader/java/JavaPluginLoader.java | 8 ++++++++ 2 files changed, 19 insertions(+) diff --git a/api/src/ap/java/com/velocitypowered/api/plugin/ap/PluginAnnotationProcessor.java b/api/src/ap/java/com/velocitypowered/api/plugin/ap/PluginAnnotationProcessor.java index 9f24b6cb9..d1c7be517 100644 --- a/api/src/ap/java/com/velocitypowered/api/plugin/ap/PluginAnnotationProcessor.java +++ b/api/src/ap/java/com/velocitypowered/api/plugin/ap/PluginAnnotationProcessor.java @@ -9,6 +9,7 @@ package com.velocitypowered.api.plugin.ap; import com.google.auto.service.AutoService; import com.google.gson.Gson; +import com.velocitypowered.api.plugin.Dependency; import com.velocitypowered.api.plugin.Plugin; import java.io.BufferedWriter; import java.io.IOException; @@ -87,6 +88,16 @@ public class PluginAnnotationProcessor extends AbstractProcessor { return false; } + for (Dependency dependency : plugin.dependencies()) { + if (!SerializedPluginDescription.ID_PATTERN.matcher(dependency.id()).matches()) { + environment.getMessager().printMessage(Diagnostic.Kind.ERROR, + "Invalid dependency ID '" + dependency.id() + "' for plugin " + qualifiedName + + ". IDs must start alphabetically, have lowercase alphanumeric characters, and " + + "can contain dashes or underscores."); + return false; + } + } + // All good, generate the velocity-plugin.json. SerializedPluginDescription description = SerializedPluginDescription .from(plugin, qualifiedName.toString()); diff --git a/proxy/src/main/java/com/velocitypowered/proxy/plugin/loader/java/JavaPluginLoader.java b/proxy/src/main/java/com/velocitypowered/proxy/plugin/loader/java/JavaPluginLoader.java index d783f476e..3795efd39 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/plugin/loader/java/JavaPluginLoader.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/plugin/loader/java/JavaPluginLoader.java @@ -72,6 +72,14 @@ public class JavaPluginLoader implements PluginLoader { throw new InvalidPluginException("Plugin ID '" + pd.getId() + "' is invalid."); } + for (SerializedPluginDescription.Dependency dependency : pd.getDependencies()) { + if (!SerializedPluginDescription.ID_PATTERN.matcher(dependency.getId()).matches()) { + throw new InvalidPluginException( + "Dependency ID '" + dependency.getId() + "' for plugin '" + pd.getId() + "' is invalid." + ); + } + } + return createCandidateDescription(pd, source); }