From a336efb8fa4e501aa42bb4df3b4a4807bcca0c76 Mon Sep 17 00:00:00 2001 From: Outfluencer Date: Mon, 12 May 2025 20:45:27 +1000 Subject: [PATCH] #3825, #3826: Check memory address availability before using natives --- .../main/java/net/md_5/bungee/BungeeCord.java | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/proxy/src/main/java/net/md_5/bungee/BungeeCord.java b/proxy/src/main/java/net/md_5/bungee/BungeeCord.java index 5eb05e10..fb92e1d4 100644 --- a/proxy/src/main/java/net/md_5/bungee/BungeeCord.java +++ b/proxy/src/main/java/net/md_5/bungee/BungeeCord.java @@ -8,6 +8,8 @@ import com.google.common.collect.Sets; import com.google.common.util.concurrent.ThreadFactoryBuilder; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import io.netty.bootstrap.ServerBootstrap; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; import io.netty.channel.Channel; import io.netty.channel.ChannelException; import io.netty.channel.ChannelFuture; @@ -230,14 +232,32 @@ public class BungeeCord extends ProxyServer if ( !Boolean.getBoolean( "net.md_5.bungee.native.disable" ) ) { - if ( EncryptionUtil.nativeFactory.load() ) + ByteBuf directBuffer = null; + boolean hasMemoryAddress = false; + try + { + directBuffer = Unpooled.directBuffer(); + hasMemoryAddress = directBuffer.hasMemoryAddress(); + } finally + { + if ( directBuffer != null ) + { + directBuffer.release(); + } + } + if ( !hasMemoryAddress ) + { + logger.warning( "Memory addresses are not available in direct buffers" ); + } + + if ( hasMemoryAddress && EncryptionUtil.nativeFactory.load() ) { logger.info( "Using mbed TLS based native cipher." ); } else { logger.info( "Using standard Java JCE cipher." ); } - if ( CompressFactory.zlib.load() ) + if ( hasMemoryAddress && CompressFactory.zlib.load() ) { logger.info( "Using zlib based native compressor." ); } else