From d1f5b09fd5fdf02c801d861b9934e2c8f554034c Mon Sep 17 00:00:00 2001 From: Rhea Date: Thu, 4 Dec 2025 16:17:29 -0500 Subject: [PATCH] packager: block use of net.runelite namespace --- .../runelite/pluginhub/packager/Plugin.java | 6 +++++ .../pluginhub/packager/PluginTest.java | 27 ++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/package/package/src/main/java/net/runelite/pluginhub/packager/Plugin.java b/package/package/src/main/java/net/runelite/pluginhub/packager/Plugin.java index 8893a8a99..29c2c3745 100644 --- a/package/package/src/main/java/net/runelite/pluginhub/packager/Plugin.java +++ b/package/package/src/main/java/net/runelite/pluginhub/packager/Plugin.java @@ -714,6 +714,12 @@ public class Plugin implements Closeable .withFile(fileName); } + if (name != null && name.startsWith("net/runelite/")) + { + throw PluginBuildException.of(Plugin.this, "use of net.runelite package namespace is not allowed") + .withFile(fileName); + } + jarClasses.add(name.replace('/', '.')); extendsPlugin = "net/runelite/client/plugins/Plugin".equals(superName); diff --git a/package/package/src/test/java/net/runelite/pluginhub/packager/PluginTest.java b/package/package/src/test/java/net/runelite/pluginhub/packager/PluginTest.java index 0661099c4..feb17a431 100644 --- a/package/package/src/test/java/net/runelite/pluginhub/packager/PluginTest.java +++ b/package/package/src/test/java/net/runelite/pluginhub/packager/PluginTest.java @@ -136,6 +136,31 @@ public class PluginTest } } + @Test + public void testNetRuneLitePackage() throws InterruptedException, DisabledPluginException, PluginBuildException, IOException + { + try (Plugin p = createExamplePlugin("net-runelite-package")) + { + File pluginClassFile = new File(p.repositoryDirectory, "src/main/java/com/example/TestExamplePlugin.java"); + String pluginClassSrc = Files.asCharSource(pluginClassFile, StandardCharsets.UTF_8).read(); + pluginClassSrc = pluginClassSrc.replace("package com.example;", "package net.runelite;"); + Files.asCharSink(pluginClassFile, StandardCharsets.UTF_8).write(pluginClassSrc); + + File configClassFile = new File(p.repositoryDirectory, "src/main/java/com/example/TestExampleConfig.java"); + String configClassSrc = Files.asCharSource(configClassFile, StandardCharsets.UTF_8).read(); + configClassSrc = configClassSrc.replace("package com.example;", "package net.runelite;"); + Files.asCharSink(configClassFile, StandardCharsets.UTF_8).write(configClassSrc); + + p.build(Util.readRLVersion(), true); + Assert.fail(); + } + catch (PluginBuildException e) + { + assertContains(e.getMessage(), "use of net.runelite package namespace is not allowed"); + log.info("ok: ", e); + } + } + private static void writeProperties(Properties props, File fi) throws IOException { try (FileOutputStream fos = new FileOutputStream(fi)) @@ -191,4 +216,4 @@ public class PluginTest { Assert.assertTrue(haystack, haystack.contains(needle)); } -} \ No newline at end of file +}