Index: Lib/test/test_subprocess.py =================================================================== --- Lib/test/test_subprocess.py (révision 80422) +++ Lib/test/test_subprocess.py (copie de travail) @@ -678,6 +678,21 @@ p.terminate() self.assertEqual(p.wait(), -signal.SIGTERM) + def test_nonascii_env(self): + value = 'h\xe9h\xe9' + script = '\n'.join(( + "import os, sys", + "value = os.getenv('TEST')", + "value = value.encode(sys.getfilesystemencoding(), 'surrogateescape')", + "sys.stdout.buffer.write(value)", + )) + stdout = subprocess.check_output( + [sys.executable, "-c", script], + env={'TEST': value}) + stdout = stdout.decode(sys.getfilesystemencoding(), 'surrogateescape') + self.assertEquals(stdout, 'h\xe9h\xe9') + + # # Windows tests # Index: Modules/posixmodule.c =================================================================== --- Modules/posixmodule.c (révision 80422) +++ Modules/posixmodule.c (copie de travail) @@ -3322,7 +3322,7 @@ /* Omit Pseudo-Env Vars that Would Confuse Programs if Passed On */ if (stricmp(k, "BEGINLIBPATH") != 0 && stricmp(k, "ENDLIBPATH") != 0) { #endif - len = PyUnicode_GetSize(key) + PyUnicode_GetSize(val) + 2; + len = strlen(k) + strlen(v) + 2; p = PyMem_NEW(char, len); if (p == NULL) { PyErr_NoMemory(); @@ -3553,7 +3553,7 @@ { goto fail_2; } - len = PyUnicode_GetSize(key) + PyUnicode_GetSize(val) + 2; + len = strlen(k) + strlen(v) + 2; p = PyMem_NEW(char, len); if (p == NULL) { PyErr_NoMemory(); @@ -3787,7 +3787,7 @@ { goto fail_2; } - len = PyUnicode_GetSize(key) + PyUnicode_GetSize(val) + 2; + len = strlen(k) + strlen(v) + 2; p = PyMem_NEW(char, len); if (p == NULL) { PyErr_NoMemory();