Skip to content

Commit

Permalink
Merge pull request #4 from anatawa12/master
Browse files Browse the repository at this point in the history
Add support for 1.13
  • Loading branch information
Rongmario authored Dec 12, 2021
2 parents 1246c36 + 969f7ce commit 243e244
Show file tree
Hide file tree
Showing 6 changed files with 124 additions and 56 deletions.
18 changes: 16 additions & 2 deletions ForgeMod/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ repositories {
sourceSets {
forge1122
forge1710
launchWrapper
modLauncher
}

dependencies {
Expand All @@ -26,7 +28,17 @@ dependencies {
implementation "org.apache.logging.log4j:log4j-api:2.8.1"
//noinspection GradlePackageUpdate // suppress IDEA
implementation "org.apache.logging.log4j:log4j-core:2.8.1"
implementation "net.minecraft:launchwrapper:1.12"

// launch wrapper dependencies
launchWrapperImplementation "net.minecraft:launchwrapper:1.12"
launchWrapperImplementation sourceSets.main.output

// launch wrapper dependencies
modLauncherImplementation "cpw.mods:modlauncher:2.1.5"
modLauncherImplementation "net.minecraftforge:forge:1.13.2-25.0.222:universal"
modLauncherImplementation sourceSets.main.output
modLauncherCompileOnly "com.google.auto.service:auto-service-annotations:1.0.1"
modLauncherAnnotationProcessor "com.google.auto.service:auto-service:1.0.1"

// the dependency for forge 1.12.2 part
forge1122Implementation "net.minecraftforge:forge:1.12.2-14.23.5.2856:universal"
Expand All @@ -42,10 +54,12 @@ dependencies {
jar {
from sourceSets.forge1122.output
from sourceSets.forge1710.output
from sourceSets.launchWrapper.output
from sourceSets.modLauncher.output

manifest {
attributes([
"TweakClass": 'zone.rong.nukejndilookupfromlog4j.tweaker.NukeJndiLookupFromLog4j',
"TweakClass": 'zone.rong.nukejndilookupfromlog4j.tweaker.NukeJndiLookupFromLog4jTweaker',
])
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ public Container() {
meta.description = "Prevents a major vulnerability introduced by log4j from being abused.";
meta.version = "1.0.0";
meta.authorList.add("Rongmario");
meta.authorList.add("anatawa12");
meta.credits = "https://github.com/apache/logging-log4j2/pull/608";
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ public Container() {
meta.description = "Prevents a major vulnerability introduced by log4j from being abused.";
meta.version = "1.0.0";
meta.authorList.add("Rongmario");
meta.authorList.add("anatawa12");
meta.credits = "https://github.com/apache/logging-log4j2/pull/608";
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package zone.rong.nukejndilookupfromlog4j.tweaker;

import net.minecraft.launchwrapper.ITweaker;
import net.minecraft.launchwrapper.LaunchClassLoader;
import zone.rong.nukejndilookupfromlog4j.NukeJndiLookupFromLog4j;

import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.util.List;

@SuppressWarnings("unused")
public class NukeJndiLookupFromLog4jTweaker implements ITweaker {
public NukeJndiLookupFromLog4jTweaker() throws ReflectiveOperationException {
NukeJndiLookupFromLog4j.init();
}

@Override
public void acceptOptions(List<String> args, File gameDir, File assetsDir, String profile) {
}

@Override
public void injectIntoClassLoader(LaunchClassLoader classLoader) {
if (classExists(classLoader, "net.minecraftforge.fml.relauncher.CoreModManager")) {
callSupport(classLoader, "Support1122");
} else if (classExists(classLoader, "cpw.mods.fml.relauncher.CoreModManager")) {
callSupport(classLoader, "Support1710");
} else {
throw new IllegalStateException("this version of minecraft is not supported!");
}
}

private boolean classExists(LaunchClassLoader classLoader, String name) {
try {
classLoader.findClass(name);
return true;
} catch (ClassNotFoundException e) {
return false;
}
}

private void callSupport(LaunchClassLoader classLoader, String name) {
try {
Class<?> supportClass = classLoader.findClass("zone.rong.nukejndilookupfromlog4j.supports." + name);
supportClass.getMethod("runSupport").invoke(null);
} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
throw new IllegalStateException(e);
}
}

@Override
public String getLaunchTarget() {
return null;
}

@Override
public String[] getLaunchArguments() {
return new String[0];
}
}
Original file line number Diff line number Diff line change
@@ -1,29 +1,21 @@
package zone.rong.nukejndilookupfromlog4j.tweaker;
package zone.rong.nukejndilookupfromlog4j;

import net.minecraft.launchwrapper.ITweaker;
import net.minecraft.launchwrapper.Launch;
import net.minecraft.launchwrapper.LaunchClassLoader;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.impl.Log4jContextFactory;
import org.apache.logging.log4j.core.lookup.Interpolator;
import org.apache.logging.log4j.core.lookup.StrLookup;
import org.apache.logging.log4j.core.util.ShutdownCallbackRegistry;
import org.apache.logging.log4j.spi.LoggerContextFactory;

import java.io.File;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Proxy;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;

@SuppressWarnings("unused") // used by reflection
public class NukeJndiLookupFromLog4j implements ITweaker {
public class NukeJndiLookupFromLog4j {
private static final MethodHandle lookupsGetter;

static {
Expand Down Expand Up @@ -60,7 +52,7 @@ private static void nukeJndiLookup(LoggerContext currentCtx) {
} catch (Throwable ignored) { }
}

public NukeJndiLookupFromLog4j() throws ReflectiveOperationException {
public static void init() throws ReflectiveOperationException {
// Deal with initial LoggerContexts
final LoggerContextFactory factory = LogManager.getFactory();
((Log4jContextFactory) factory).getSelector().getLoggerContexts().forEach(NukeJndiLookupFromLog4j::nukeJndiLookup);
Expand All @@ -75,47 +67,4 @@ public NukeJndiLookupFromLog4j() throws ReflectiveOperationException {
return result;
}));
}

@Override
public void acceptOptions(List<String> args, File gameDir, File assetsDir, String profile) {
}

@Override
public void injectIntoClassLoader(LaunchClassLoader classLoader) {
if (classExists(classLoader, "net.minecraftforge.fml.relauncher.CoreModManager")) {
callSupport(classLoader, "Support1122");
} else if (classExists(classLoader, "cpw.mods.fml.relauncher.CoreModManager")) {
callSupport(classLoader, "Support1710");
} else {
throw new IllegalStateException("this version of minecraft is not supported!");
}
}

private boolean classExists(LaunchClassLoader classLoader, String name) {
try {
classLoader.findClass(name);
return true;
} catch (ClassNotFoundException e) {
return false;
}
}

private void callSupport(LaunchClassLoader classLoader, String name) {
try {
Class<?> supportClass = classLoader.findClass("zone.rong.nukejndilookupfromlog4j.supports." + name);
supportClass.getMethod("runSupport").invoke(null);
} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
throw new IllegalStateException(e);
}
}

@Override
public String getLaunchTarget() {
return null;
}

@Override
public String[] getLaunchArguments() {
return new String[0];
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package zone.rong.nukejndilookupfromlog4j.modlauncher;

import com.google.auto.service.AutoService;
import cpw.mods.modlauncher.api.IEnvironment;
import cpw.mods.modlauncher.api.ITransformationService;
import cpw.mods.modlauncher.api.ITransformer;
import zone.rong.nukejndilookupfromlog4j.NukeJndiLookupFromLog4j;

import javax.annotation.Nonnull;
import java.util.Collections;
import java.util.List;
import java.util.Set;

@SuppressWarnings("unused")
@AutoService(ITransformationService.class)
public class NukeJndiLookupFromLog4jTransformationService implements ITransformationService {
public NukeJndiLookupFromLog4jTransformationService() throws ReflectiveOperationException {
NukeJndiLookupFromLog4j.init();
}

@Nonnull
@Override
public String name() {
return "nukejndilookupfromlog4j";
}

@Override
public void initialize(IEnvironment environment) {
}

@Override
public void beginScanning(IEnvironment environment) {
}

@Override
public void onLoad(IEnvironment env, Set<String> otherServices) {
}

@Nonnull
@Override
public List<ITransformer> transformers() {
return Collections.emptyList();
}
}

0 comments on commit 243e244

Please sign in to comment.