Add configurable plugin messaging limits (#702)

This commit is contained in:
FivePB (Xer) 2021-11-16 23:51:50 +01:00 committed by GitHub
parent 3ce6f14465
commit e35e947aa2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 105 additions and 0 deletions

View File

@ -0,0 +1,105 @@
From cffebb622018407da2281f266d82acce6b752cac Mon Sep 17 00:00:00 2001
From: FivePB <admin@fivepb.me>
Date: Tue, 16 Nov 2021 21:15:32 +0100
Subject: [PATCH] Configurable plugin messaging limits
This patch makes the maximum number of registered plugin channels as well
as their name length limit configurable. This is required for some modded
servers and clients to work
diff --git a/api/src/main/java/net/md_5/bungee/api/ProxyConfig.java b/api/src/main/java/net/md_5/bungee/api/ProxyConfig.java
index d69463f0..469fe0e1 100644
--- a/api/src/main/java/net/md_5/bungee/api/ProxyConfig.java
+++ b/api/src/main/java/net/md_5/bungee/api/ProxyConfig.java
@@ -261,4 +261,18 @@ public interface ProxyConfig
* @return {@code true} if tablist rewriting is disabled, {@code false} otherwise
*/
boolean isDisableTabListRewrite();
+
+ /**
+ * Gets the maximum number of registered plugin channels for any connection.
+ *
+ * @return the configured limit
+ */
+ int getPluginChannelLimit();
+
+ /**
+ * Gets the maximum length for any plugin message channel identifier.
+ *
+ * @return the configured limit
+ */
+ int getPluginChannelNameLimit();
}
diff --git a/proxy/src/main/java/io/github/waterfallmc/waterfall/conf/WaterfallConfiguration.java b/proxy/src/main/java/io/github/waterfallmc/waterfall/conf/WaterfallConfiguration.java
index 527f310e..e31fb00a 100644
--- a/proxy/src/main/java/io/github/waterfallmc/waterfall/conf/WaterfallConfiguration.java
+++ b/proxy/src/main/java/io/github/waterfallmc/waterfall/conf/WaterfallConfiguration.java
@@ -45,6 +45,23 @@ public class WaterfallConfiguration extends Configuration {
private boolean disableEntityMetadataRewrite = false;
private boolean disableTabListRewrite = false;
+ /*
+ * Plugin Message limiting options
+ * Allows for more control over server-client communication
+ */
+
+ /**
+ * How many channels there can be between server and player,
+ * typically used by mods or some plugins.
+ */
+ private int pluginChannelLimit = 128;
+
+ /**
+ * How long the maximum channel name can be,
+ * only reason to change it would be broken mods.
+ */
+ private int pluginChannelNameLimit = 128;
+
@Override
public void load() {
super.load();
@@ -58,6 +75,8 @@ public class WaterfallConfiguration extends Configuration {
disableModernTabLimiter = config.getBoolean("disable_modern_tab_limiter", disableModernTabLimiter);
disableEntityMetadataRewrite = config.getBoolean("disable_entity_metadata_rewrite", disableEntityMetadataRewrite);
disableTabListRewrite = config.getBoolean("disable_tab_list_rewrite", disableTabListRewrite);
+ pluginChannelLimit = config.getInt("registered_plugin_channels_limit", pluginChannelLimit);
+ pluginChannelNameLimit = config.getInt("plugin_channel_name_limit", pluginChannelNameLimit);
}
@Override
@@ -94,4 +113,14 @@ public class WaterfallConfiguration extends Configuration {
public boolean isDisableTabListRewrite() {
return disableTabListRewrite;
}
+
+ @Override
+ public int getPluginChannelLimit() {
+ return pluginChannelLimit;
+ }
+
+ @Override
+ public int getPluginChannelNameLimit() {
+ return pluginChannelNameLimit;
+ }
}
diff --git a/proxy/src/main/java/net/md_5/bungee/connection/InitialHandler.java b/proxy/src/main/java/net/md_5/bungee/connection/InitialHandler.java
index c3e60fa5..4afab05d 100644
--- a/proxy/src/main/java/net/md_5/bungee/connection/InitialHandler.java
+++ b/proxy/src/main/java/net/md_5/bungee/connection/InitialHandler.java
@@ -682,9 +682,10 @@ public class InitialHandler extends PacketHandler implements PendingConnection
for ( String id : content.split( "\0" ) )
{
- Preconditions.checkState( registeredChannels.size() < 128, "Too many registered channels" );
- Preconditions.checkArgument( id.length() < 128, "Channel name too long" );
-
+ // Waterfall start: Add configurable limits for plugin messaging
+ Preconditions.checkState( !(registeredChannels.size() > bungee.getConfig().getPluginChannelLimit()), "Too many registered channels. This limit can be configured in the waterfall.yml" );
+ Preconditions.checkArgument( !(id.length() > bungee.getConfig().getPluginChannelNameLimit()), "Channel name too long. This limit can be configured in the waterfall.yml" );
+ // Waterfall end
registeredChannels.add( id );
}
} else if ( input.getTag().equals( "UNREGISTER" ) || input.getTag().equals( "minecraft:unregister" ) )
--
2.33.1