Procházet zdrojové kódy

Hard linking jdk builtin modules; fix #2141; fix #2126

- Not allow override jdk modules
Karlatemp před 3 roky
rodič
revize
1be39eeb0a

+ 0 - 0
mirai-console/backend/integration-test/testers/never-override-jdk-modules/module-jdk-module/.nested-module.txt


+ 1 - 0
mirai-console/backend/integration-test/testers/never-override-jdk-modules/module-jdk-module/resources/mvn.txt

@@ -0,0 +1 @@
+net.mamoe.consoleit.issue2141:javax-xml:1.0.0

+ 12 - 0
mirai-console/backend/integration-test/testers/never-override-jdk-modules/module-jdk-module/src/javax/xml/parsers/SAXParser.kt

@@ -0,0 +1,12 @@
+/*
+ * Copyright 2019-2022 Mamoe Technologies and contributors.
+ *
+ * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
+ * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
+ *
+ * https://github.com/mamoe/mirai/blob/dev/LICENSE
+ */
+
+package javax.xml.parsers
+
+public class SAXParser

+ 10 - 0
mirai-console/backend/integration-test/testers/never-override-jdk-modules/resources/META-INF/services/net.mamoe.mirai.console.plugin.jvm.JvmPlugin

@@ -0,0 +1,10 @@
+#
+# Copyright 2019-2022 Mamoe Technologies and contributors.
+#
+# 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
+# Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
+#
+# https://github.com/mamoe/mirai/blob/dev/LICENSE
+#
+
+neveroverridejdkmodules.NeverOverrideJdkModules

+ 46 - 0
mirai-console/backend/integration-test/testers/never-override-jdk-modules/src/NeverOverrideJdkModules.kt

@@ -0,0 +1,46 @@
+/*
+ * Copyright 2019-2022 Mamoe Technologies and contributors.
+ *
+ * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
+ * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
+ *
+ * https://github.com/mamoe/mirai/blob/dev/LICENSE
+ */
+
+package neveroverridejdkmodules
+
+import net.mamoe.console.integrationtest.assertClassSame
+import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescription
+import net.mamoe.mirai.console.plugin.jvm.KotlinPlugin
+
+public object NeverOverrideJdkModules : KotlinPlugin(
+    JvmPluginDescription("net.mamoe.console.itest.never-override-jdk-modules", "0.0.0")
+) {
+    init {
+        jvmPluginClasspath.downloadAndAddToPath(
+            jvmPluginClasspath.pluginSharedLibrariesClassLoader,
+            listOf("net.mamoe.consoleit.issue2141:javax-xml:1.0.0")
+        )
+    }
+
+    @Suppress("Since15")
+    override fun onEnable() {
+        val platformC = ClassLoader.getSystemClassLoader().loadClass("javax.xml.parsers.SAXParser")
+        assertClassSame(
+            platformC,
+            Class.forName("javax.xml.parsers.SAXParser"),
+        )
+        assertClassSame(
+            platformC,
+            jvmPluginClasspath.pluginClassLoader.loadClass("javax.xml.parsers.SAXParser"),
+        )
+        assertClassSame(
+            platformC,
+            jvmPluginClasspath.pluginIndependentLibrariesClassLoader.loadClass("javax.xml.parsers.SAXParser"),
+        )
+        assertClassSame(
+            platformC,
+            jvmPluginClasspath.pluginSharedLibrariesClassLoader.loadClass("javax.xml.parsers.SAXParser"),
+        )
+    }
+}

+ 4 - 0
mirai-console/backend/mirai-console/src/internal/plugin/JvmPluginClassLoader.kt

@@ -94,6 +94,10 @@ internal class DynLibClassLoader : URLClassLoader {
                 } catch (ignored: ClassNotFoundException) {
                 }
             }
+            try {
+                return Class.forName(name, false, JavaSystemPlatformClassLoader)
+            } catch (ignored: ClassNotFoundException) {
+            }
             return null
         }
     }