Index: Objects/unicodeobject.c =================================================================== --- Objects/unicodeobject.c (revision 73674) +++ Objects/unicodeobject.c (working copy) @@ -4201,10 +4201,12 @@ repsize = PyBytes_Size(repunicode); if (repsize > 1) { /* Make room for all additional bytes. */ + respos = str - PyBytes_AS_STRING(res); if (_PyBytes_Resize(&res, ressize+repsize-1)) { Py_DECREF(repunicode); goto onError; } + str = PyBytes_AS_STRING(res) + respos; ressize += repsize-1; } memcpy(str, PyBytes_AsString(repunicode), repsize); Index: Lib/test/test_codecs.py =================================================================== --- Lib/test/test_codecs.py (revision 73674) +++ Lib/test/test_codecs.py (working copy) @@ -1549,7 +1549,12 @@ self.assertEqual("foo\udca5bar".encode("iso-8859-3", "surrogateescape"), b"foo\xa5bar") + def test_latin1(self): + # Issue6373 + self.assertEqual("\udce4\udceb\udcef\udcf6\udcfc".encode("latin1", "surrogateescape"), + b"\xe4\xeb\xef\xf6\xfc") + def test_main(): support.run_unittest( UTF32Test,