diff --git a/minijson.pyx b/minijson.pyx index b6f5aa659b6b77b7c176f9e931b39204a9874788..bc80cdb339f2f309b98c0006add03796dd5b122c 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 de288d6906b999139b5269736ae74f22a066edd8..526b7e256a188086a9c95047bd28ac3144c57c6a 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')