From a8c8a07e018ae31842ab7b3e972c560579bd4529 Mon Sep 17 00:00:00 2001 From: Lossy Date: Mon, 26 Oct 2026 20:54:09 -0500 Subject: [PATCH] Don't throw when sending races with a disconnect on an encrypted connection. SK b15ae1b --- .../steam3/EnvelopeEncryptedConnection.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/java/in/dragonbra/javasteam/networking/steam3/EnvelopeEncryptedConnection.java b/src/main/java/in/dragonbra/javasteam/networking/steam3/EnvelopeEncryptedConnection.java index a2976ffd..8be60831 100644 --- a/src/main/java/in/dragonbra/javasteam/networking/steam3/EnvelopeEncryptedConnection.java +++ b/src/main/java/in/dragonbra/javasteam/networking/steam3/EnvelopeEncryptedConnection.java @@ -203,11 +203,20 @@ public void disconnect(boolean userInitiated) { @Override public void send(byte[] data) { - if (state == EncryptionState.ENCRYPTED) { - data = encryption.processOutgoing(data); + if (state != EncryptionState.ENCRYPTED) { + inner.send(data); + return; } - inner.send(data); + // A disconnect on the network thread can clear the encryption between the state check and here + var currentEncryption = encryption; + + if (currentEncryption == null) { + logger.debug("Attempting to send client data when not connected."); + return; + } + + inner.send(currentEncryption.processOutgoing(data)); } @Override