From e978525053089f87421b93c193af0df79b9c0fa1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Piotr=20Ma=C5=9Blanka?= <piotr.maslanka@henrietta.com.pl>
Date: Fri, 13 Aug 2021 19:19:02 +0200
Subject: [PATCH] v2.11 major bugfix

---
 minijson.pyx           | 5 +++--
 tests/test_minijson.py | 3 +++
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/minijson.pyx b/minijson.pyx
index b6f5aa6..bc80cdb 100644
--- a/minijson.pyx
+++ b/minijson.pyx
@@ -517,8 +517,9 @@ cdef class MiniJSONEncoder:
                     data.sort()  # sort implicitly will sort it by first value, which is the key
 
                 for field_name, elem in data:
-                    cio.write(bytearray([len(field_name)]))
-                    cio.write(field_name.encode('utf-8'))
+                    b_data = field_name.encode('utf-8')
+                    cio.write(bytearray([len(b_data)]))
+                    cio.write(b_data)
                     length += self.dump(elem, cio)
                 return length
             else:
diff --git a/tests/test_minijson.py b/tests/test_minijson.py
index de288d6..526b7e2 100644
--- a/tests/test_minijson.py
+++ b/tests/test_minijson.py
@@ -137,6 +137,9 @@ class TestMiniJSON(unittest.TestCase):
         self.assertSameAfterDumpsAndLoads({i: i for i in range(300)})
         self.assertSameAfterDumpsAndLoads({i: i for i in range(66000)})
 
+    def test_smok_bug_case_2(self):
+        self.assertSameAfterDumpsAndLoads({"zażółć gęślą jaźń": "zażółć gęślą jaźń"})
+
     def test_invalid_name_dict(self):
         self.assertLoadingIsDecodingError(b'\x15\x01\x81\x01')
         self.assertLoadingIsDecodingError(b'\x0B\x01\x01\xFF\x15')
-- 
GitLab