From 3455bced55df290eca015243c5b2977a3ec8727e Mon Sep 17 00:00:00 2001 From: Leonid Stashevsky Date: Wed, 12 Oct 2022 09:43:41 +0300 Subject: [PATCH] KTOR-4916 Fix recursion in deflate config (#3193) --- .../io/ktor/websocket/WebSocketDeflateExtension.kt | 3 ++- .../ktor-websockets/jvm/test/WebSocketDeflateTest.kt | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/ktor-shared/ktor-websockets/jvm/src/io/ktor/websocket/WebSocketDeflateExtension.kt b/ktor-shared/ktor-websockets/jvm/src/io/ktor/websocket/WebSocketDeflateExtension.kt index 62155530c0..3e41b97a60 100644 --- a/ktor-shared/ktor-websockets/jvm/src/io/ktor/websocket/WebSocketDeflateExtension.kt +++ b/ktor-shared/ktor-websockets/jvm/src/io/ktor/websocket/WebSocketDeflateExtension.kt @@ -173,8 +173,9 @@ public class WebSocketDeflateExtension internal constructor( * Configure which protocols should send the client. */ public fun configureProtocols(block: (protocols: MutableList) -> Unit) { + val old = manualConfig manualConfig = { - manualConfig(it) + old(it) block(it) } } diff --git a/ktor-shared/ktor-websockets/jvm/test/WebSocketDeflateTest.kt b/ktor-shared/ktor-websockets/jvm/test/WebSocketDeflateTest.kt index 1ac0ad401d..5c12043236 100644 --- a/ktor-shared/ktor-websockets/jvm/test/WebSocketDeflateTest.kt +++ b/ktor-shared/ktor-websockets/jvm/test/WebSocketDeflateTest.kt @@ -60,4 +60,16 @@ class WebSocketDeflateTest { assertEquals(extension.incomingNoContextTakeover, false) assertEquals(extension.outgoingNoContextTakeover, true) } + + @Test + fun testManualConfig() { + val config = WebSocketDeflateExtension.Config() + config.manualConfig(mutableListOf()) + + config.configureProtocols { + it.add(WebSocketExtensionHeader("permessage-deflate", listOf("client_no_context_takeover"))) + } + + config.manualConfig(mutableListOf()) + } }