From 2a20216d32f08bb589a096e9e6b792b4242c3060 Mon Sep 17 00:00:00 2001 From: JFronny Date: Sat, 11 Mar 2023 12:13:47 +0100 Subject: [PATCH] Additional crash providers: OOM, Segfault and StackOverflow --- README.md | 5 ++++- build.gradle.kts | 6 ++++++ .../breakme/crash/safe/SegfaultProvider.java | 12 ++++++++++++ .../breakme/crash/safe/StackOverflowProvider.java | 10 ++++++++++ .../jfronny/breakme/crash/unsafe/OOMProvider.java | 15 +++++++++++++++ src/main/resources/assets/breakme/lang/en_us.json | 3 +++ 6 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 src/main/java/io/gitlab/jfronny/breakme/crash/safe/SegfaultProvider.java create mode 100644 src/main/java/io/gitlab/jfronny/breakme/crash/safe/StackOverflowProvider.java create mode 100644 src/main/java/io/gitlab/jfronny/breakme/crash/unsafe/OOMProvider.java diff --git a/README.md b/README.md index 5f48ce5..78f28ae 100644 --- a/README.md +++ b/README.md @@ -17,13 +17,16 @@ The values are explained in more detail below - Method: - Unsafe_Universal_Forkbomb: Launch a self-multiplying process - Unsafe_Windows_WinAPI: Do some JNI-magic to instantly produce a blue-screen on windows + - Unsafe_Universal_OOM: Causes an OOM exception - Broken_Universal_ExitCode: Exit the integrated Server. The game still displays, but you can no longer interact with the world or quit. - Safe_Universal_Exception: Performs an invalid operation. Behaves like every other crash and just closes the game, leaving a crash log. - SemiUnsafe_Universal_Exception: Throws a security exceptions. This does not work properly for 1.16.2 - SemiUnsafe_Universal_Shutdown: Attempts to run a shutdown command. Since these are specific to some systems this might not always work. + - SemiUnsafe_Universal_Segfault: Causes a segmentation fault using lwjgl. + - SemiUnsafe_Universal_StackOverflow: Causes a stack overflow via infinite recursion. - None: Do nothing -Please note that all methods marked "Unsafe" as well as the shutdown method are not available in the curseforge release +Please note that all methods marked "Unsafe" as well as the shutdown method are not available in the CurseForge release # Building diff --git a/build.gradle.kts b/build.gradle.kts index c6d9b5c..17317a5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -22,6 +22,12 @@ dependencies { modLocalRuntime("com.terraformersmc:modmenu:5.0.2") } +loom { + runs { + this.named("client").get().vmArg("-Xmx2G") + } +} + fun list(`package`: String) = Files.list(projectDir.resolve("src/main/java").resolve(`package`.replace('.', '/')).toPath()).use { stream -> stream .map { it.fileName.toString() } diff --git a/src/main/java/io/gitlab/jfronny/breakme/crash/safe/SegfaultProvider.java b/src/main/java/io/gitlab/jfronny/breakme/crash/safe/SegfaultProvider.java new file mode 100644 index 0000000..27f1400 --- /dev/null +++ b/src/main/java/io/gitlab/jfronny/breakme/crash/safe/SegfaultProvider.java @@ -0,0 +1,12 @@ +package io.gitlab.jfronny.breakme.crash.safe; + +import io.gitlab.jfronny.breakme.crash.CrashProvider; +import org.lwjgl.BufferUtils; +import org.lwjgl.PointerBuffer; + +public class SegfaultProvider implements CrashProvider { + @Override + public void crash() throws Exception { + BufferUtils.zeroBuffer(PointerBuffer.create(0, 1000)); + } +} diff --git a/src/main/java/io/gitlab/jfronny/breakme/crash/safe/StackOverflowProvider.java b/src/main/java/io/gitlab/jfronny/breakme/crash/safe/StackOverflowProvider.java new file mode 100644 index 0000000..b92d7bf --- /dev/null +++ b/src/main/java/io/gitlab/jfronny/breakme/crash/safe/StackOverflowProvider.java @@ -0,0 +1,10 @@ +package io.gitlab.jfronny.breakme.crash.safe; + +import io.gitlab.jfronny.breakme.crash.CrashProvider; + +public class StackOverflowProvider implements CrashProvider { + @Override + public void crash() throws Exception { + crash(); + } +} diff --git a/src/main/java/io/gitlab/jfronny/breakme/crash/unsafe/OOMProvider.java b/src/main/java/io/gitlab/jfronny/breakme/crash/unsafe/OOMProvider.java new file mode 100644 index 0000000..c9b202d --- /dev/null +++ b/src/main/java/io/gitlab/jfronny/breakme/crash/unsafe/OOMProvider.java @@ -0,0 +1,15 @@ +package io.gitlab.jfronny.breakme.crash.unsafe; + +import io.gitlab.jfronny.breakme.crash.CrashProvider; + +import java.nio.ByteBuffer; +import java.util.LinkedList; +import java.util.List; + +public class OOMProvider implements CrashProvider { + @Override + public void crash() throws Exception { + List bl = new LinkedList<>(); + while (true) bl.add(ByteBuffer.allocate(1024 * 1024 * 1024)); + } +} diff --git a/src/main/resources/assets/breakme/lang/en_us.json b/src/main/resources/assets/breakme/lang/en_us.json index b11d46a..6c611f5 100644 --- a/src/main/resources/assets/breakme/lang/en_us.json +++ b/src/main/resources/assets/breakme/lang/en_us.json @@ -11,8 +11,11 @@ "breakme.jfconfig.enum.Method.Exception": "Safe_Universal_Exception", "breakme.jfconfig.enum.Method.ExitCode": "Broken_Universal_ExitCode", "breakme.jfconfig.enum.Method.SecurityException": "SemiUnsafe_Universal_Exception", + "breakme.jfconfig.enum.Method.Segfault": "SemiUnsafe_Universal_Segfault", + "breakme.jfconfig.enum.Method.StackOverflow": "SemiUnsafe_Universal_StackOverflow", "breakme.jfconfig.enum.Method.Forkbomb": "Unsafe_Universal_Forkbomb", "breakme.jfconfig.enum.Method.Shutdown": "SemiUnsafe_Universal_Shutdown", + "breakme.jfconfig.enum.Method.OOM": "Unsafe_Universal_OOM", "breakme.jfconfig.enum.Method.WinApi": "Unsafe_Windows_WinAPI", "breakme.jfconfig.enum.Method.None": "None" } \ No newline at end of file