From 5f3bda61beac791e24e6b73f4ea6780bb89d498e Mon Sep 17 00:00:00 2001
From: Davide Pianca <davidepianca98@gmail.com>
Date: Thu, 8 Aug 2024 09:28:51 +0200
Subject: [PATCH] Close server socket on initialization error on JVM

---
 .../kotlin/socket/tls/TLSServerSocket.kt      | 23 +++++++++++--------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/kmqtt-broker/src/jvmMain/kotlin/socket/tls/TLSServerSocket.kt b/kmqtt-broker/src/jvmMain/kotlin/socket/tls/TLSServerSocket.kt
index b527681..7d252a7 100644
--- a/kmqtt-broker/src/jvmMain/kotlin/socket/tls/TLSServerSocket.kt
+++ b/kmqtt-broker/src/jvmMain/kotlin/socket/tls/TLSServerSocket.kt
@@ -27,17 +27,22 @@ internal actual class TLSServerSocket actual constructor(
     private val sslContext = SSLContext.getInstance(broker.tlsSettings!!.version)
 
     init {
-        val keyStore = KeyStore.getInstance("PKCS12")
-        File(broker.tlsSettings!!.keyStoreFilePath).inputStream().use {
-            keyStore.load(it, broker.tlsSettings.keyStorePassword?.toCharArray())
-        }
-        val keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm())
-        keyManagerFactory.init(keyStore, broker.tlsSettings.keyStorePassword?.toCharArray())
+        try {
+            val keyStore = KeyStore.getInstance("PKCS12")
+            File(broker.tlsSettings!!.keyStoreFilePath).inputStream().use {
+                keyStore.load(it, broker.tlsSettings.keyStorePassword?.toCharArray())
+            }
+            val keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm())
+            keyManagerFactory.init(keyStore, broker.tlsSettings.keyStorePassword?.toCharArray())
 
-        sslContext.init(keyManagerFactory.keyManagers, null, null)
+            sslContext.init(keyManagerFactory.keyManagers, null, null)
 
-        val initSession = sslContext.createSSLEngine().session
-        initSession.invalidate()
+            val initSession = sslContext.createSSLEngine().session
+            initSession.invalidate()
+        } catch (e: Exception) {
+            close()
+            throw e
+        }
     }
 
     private fun buildKeyManagers(
-- 
GitLab