From b8ebbb3e2f328de53607783dfba26142bb718435 Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Wed, 7 Mar 2018 16:07:33 +0100
Subject: [PATCH] Attempt to improve reliability of StringSerializer

---
 .../protocol/primitive/serializer/StringSerializer.kt     | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/StringSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/StringSerializer.kt
index 582a41b8b..300f25a87 100644
--- a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/StringSerializer.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/StringSerializer.kt
@@ -10,7 +10,7 @@ import java.nio.charset.CharsetDecoder
 import java.nio.charset.CharsetEncoder
 
 abstract class StringSerializer(
-  private var encoder: CharsetEncoder,
+  private val encoder: CharsetEncoder,
   private val decoder: CharsetDecoder,
   private val trailingNullBytes: Int
 ) : Serializer<String?> {
@@ -51,7 +51,7 @@ abstract class StringSerializer(
         val charBuffer = charBuffer(data.length)
         charBuffer.put(data)
         charBuffer.flip()
-        encoder = encoder.charset().newEncoder()
+        encoder.reset()
         val byteBuffer = encoder.encode(charBuffer)
         IntSerializer.serialize(buffer, byteBuffer.remaining() + trailingNullBytes, features)
         buffer.put(byteBuffer)
@@ -71,7 +71,7 @@ abstract class StringSerializer(
         val charBuffer = charBuffer(data.length)
         charBuffer.put(data)
         charBuffer.flip()
-        encoder = encoder.charset().newEncoder()
+        encoder.reset()
         return encoder.encode(charBuffer)
       }
     } catch (e: Throwable) {
@@ -88,6 +88,7 @@ abstract class StringSerializer(
         val limit = buffer.limit()
         buffer.limit(buffer.position() + len - trailingNullBytes)
         val charBuffer = charBuffer(len)
+        decoder.reset()
         decoder.decode(buffer, charBuffer, true)
         buffer.limit(limit)
         buffer.position(buffer.position() + trailingNullBytes)
@@ -109,6 +110,7 @@ abstract class StringSerializer(
         val limit = buffer.limit()
         buffer.limit(buffer.position() + Math.max(0, len - trailingNullBytes))
         val charBuffer = charBuffer(len)
+        decoder.reset()
         decoder.decode(buffer, charBuffer, true)
         buffer.limit(limit)
         buffer.position(buffer.position() + trailingNullBytes)
-- 
GitLab