Skip to content

Commit 594e2ed

Browse files
chibby0nebenjaminp
authored andcommitted
closes bpo-36161: Use thread-safe ttyname_r instead of ttyname. (GH-14868)
Signed-off-by: Antonio Gutierrez <chibby0ne@gmail.com>
1 parent e8bedbd commit 594e2ed

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
In :mod:`posix`, use ``ttyname_r`` instead of ``ttyname`` for thread safety.

Modules/posixmodule.c

+15-4
Original file line numberDiff line numberDiff line change
@@ -2774,13 +2774,24 @@ static PyObject *
27742774
os_ttyname_impl(PyObject *module, int fd)
27752775
/*[clinic end generated code: output=c424d2e9d1cd636a input=9ff5a58b08115c55]*/
27762776
{
2777-
char *ret;
27782777

2779-
ret = ttyname(fd);
2780-
if (ret == NULL) {
2778+
long size = sysconf(_SC_TTY_NAME_MAX);
2779+
if (size == -1) {
2780+
return posix_error();
2781+
}
2782+
char *buffer = (char *)PyMem_RawMalloc(size);
2783+
if (buffer == NULL) {
2784+
return PyErr_NoMemory();
2785+
}
2786+
int ret = ttyname_r(fd, buffer, size);
2787+
if (ret != 0) {
2788+
PyMem_RawFree(buffer);
2789+
errno = ret;
27812790
return posix_error();
27822791
}
2783-
return PyUnicode_DecodeFSDefault(ret);
2792+
PyObject *res = PyUnicode_DecodeFSDefault(buffer);
2793+
PyMem_RawFree(buffer);
2794+
return res;
27842795
}
27852796
#endif
27862797

0 commit comments

Comments
 (0)