Security fixes for #5

This commit is contained in:
Sotr
2018-06-07 13:37:02 +08:00
parent 8ca09fcaf6
commit c38ade2ad8
7 changed files with 2 additions and 4392 deletions

View File

@@ -15,7 +15,6 @@ import com.google.common.util.concurrent.ThreadFactoryBuilder;
import co.aikar.timings.Timing; import co.aikar.timings.Timing;
import co.aikar.timings.Timings; import co.aikar.timings.Timings;
import io.netty.channel.Channel.Unsafe;
public abstract class Akari { public abstract class Akari {
/** /**

View File

@@ -140,10 +140,6 @@ public class MixinMinecraftServer {
this.an().c(); this.an().c();
MinecraftTimings.connectionTimer.stopTiming(); MinecraftTimings.connectionTimer.stopTiming();
Akari.callbackTiming().startTiming();
while ((runnable = Akari.callbackQueue.poll()) != null) runnable.run();
Akari.callbackTiming().stopTiming();
MinecraftTimings.playerListTimer.startTiming(); MinecraftTimings.playerListTimer.startTiming();
this.v.tick(); this.v.tick();
MinecraftTimings.playerListTimer.stopTiming(); MinecraftTimings.playerListTimer.stopTiming();

View File

@@ -1,9 +0,0 @@
package io.akarin.server.mixin.core;
import org.spongepowered.asm.mixin.Mixin;
import net.minecraft.server.NetworkManager;
@Mixin(value = NetworkManager.class, remap = false)
public class MixinNetworkManager {
}

View File

@@ -31,6 +31,7 @@ import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.util.concurrent.Future; import io.netty.util.concurrent.Future;
import io.netty.util.concurrent.GenericFutureListener; import io.netty.util.concurrent.GenericFutureListener;
import net.minecraft.server.ChatComponentText; import net.minecraft.server.ChatComponentText;
import net.minecraft.server.ITickable;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.server.NetworkManager; import net.minecraft.server.NetworkManager;
import net.minecraft.server.PacketPlayOutKickDisconnect; import net.minecraft.server.PacketPlayOutKickDisconnect;
@@ -135,15 +136,13 @@ public class NonblockingServerConnection {
Collections.shuffle(h); Collections.shuffle(h);
} }
int submitted = 0;
Iterator<NetworkManager> it = h.iterator(); Iterator<NetworkManager> it = h.iterator();
while (it.hasNext()) { while (it.hasNext()) {
NetworkManager manager = it.next(); NetworkManager manager = it.next();
if (manager.h()) continue; // PAIL: NetworkManager::hasNoChannel if (manager.h()) continue; // PAIL: NetworkManager::hasNoChannel
if (manager.isConnected()) { if (manager.isConnected()) {
Akari.STAGE_TICK.submit(() -> processPackets(manager), null); processPackets(manager);
submitted++;
} else { } else {
// Spigot - Fix a race condition where a NetworkManager could be unregistered just before connection. // Spigot - Fix a race condition where a NetworkManager could be unregistered just before connection.
if (manager.preparing) continue; if (manager.preparing) continue;
@@ -152,10 +151,6 @@ public class NonblockingServerConnection {
manager.handleDisconnection(); manager.handleDisconnection();
} }
} }
for (int i = 0; i < submitted; i++) {
Akari.STAGE_TICK.take();
}
} }
} }
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,5 @@
package net.minecraft.server; package net.minecraft.server;
import com.google.common.collect.Queues;
import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.google.common.util.concurrent.ThreadFactoryBuilder;
import io.akarin.api.CheckedConcurrentLinkedQueue; import io.akarin.api.CheckedConcurrentLinkedQueue;