summaryrefslogtreecommitdiffstats
path: root/Modules/posixmodule.c
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2023-11-10 16:42:14 (GMT)
committerGitHub <noreply@github.com>2023-11-10 16:42:14 (GMT)
commit0b06d2482d77e02c5d40e221f6046c9c355458b2 (patch)
tree5401420104942e6729d7e9ea93bc89c9fd646ed9 /Modules/posixmodule.c
parent2e7f0700800c0337a0b1b9471fcef410e3158250 (diff)
downloadcpython-0b06d2482d77e02c5d40e221f6046c9c355458b2.zip
cpython-0b06d2482d77e02c5d40e221f6046c9c355458b2.tar.gz
cpython-0b06d2482d77e02c5d40e221f6046c9c355458b2.tar.bz2
gh-111841: Fix os.putenv() and os.unsetenv() with embedded NUL on Windows (GH-111842)
Diffstat (limited to 'Modules/posixmodule.c')
-rw-r--r--Modules/posixmodule.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 73b80e4..d99b533 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -12280,7 +12280,6 @@ win32_putenv(PyObject *name, PyObject *value)
}
Py_ssize_t size;
- /* PyUnicode_AsWideCharString() rejects embedded null characters */
wchar_t *env = PyUnicode_AsWideCharString(unicode, &size);
Py_DECREF(unicode);
@@ -12294,6 +12293,12 @@ win32_putenv(PyObject *name, PyObject *value)
PyMem_Free(env);
return NULL;
}
+ if (wcslen(env) != (size_t)size) {
+ PyErr_SetString(PyExc_ValueError,
+ "embedded null character");
+ PyMem_Free(env);
+ return NULL;
+ }
/* _wputenv() and SetEnvironmentVariableW() update the environment in the
Process Environment Block (PEB). _wputenv() also updates CRT 'environ'