diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -6653,9 +6653,12 @@ posix_confstr(PyObject *self, PyObject * } else { if ((unsigned int)len >= sizeof(buffer)) { - result = PyUnicode_FromStringAndSize(NULL, len-1); - if (result != NULL) - confstr(name, _PyUnicode_AsString(result), len); + char *buf = PyMem_Malloc(len); + if (buf == NULL) + return PyErr_NoMemory(); + confstr(name, buf, len); + result = PyUnicode_FromStringAndSize(buf, len-1); + PyMem_Free(buf); } else result = PyUnicode_FromStringAndSize(buffer, len-1);