mirror of
https://github.com/python/cpython.git
synced 2025-08-19 00:00:48 +00:00
Issue #9185: On Solaris and OpenBSD, posix_getcwd() could loop indefinitely
if the path length exceeded PATH_MAX.
This commit is contained in:
parent
320477e4db
commit
182ae64235
2 changed files with 30 additions and 1 deletions
|
@ -1957,6 +1957,28 @@ PyDoc_STRVAR(posix_getcwd__doc__,
|
|||
"getcwd() -> path\n\n\
|
||||
Return a string representing the current working directory.");
|
||||
|
||||
#if (defined(__sun) && defined(__SVR4)) || defined(__OpenBSD__)
|
||||
/* Issue 9185: getcwd() returns NULL/ERANGE indefinitely. */
|
||||
static PyObject *
|
||||
posix_getcwd(PyObject *self, PyObject *noargs)
|
||||
{
|
||||
char buf[PATH_MAX+2];
|
||||
char *res;
|
||||
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
#if defined(PYOS_OS2) && defined(PYCC_GCC)
|
||||
res = _getcwd2(buf, sizeof buf);
|
||||
#else
|
||||
res = getcwd(buf, sizeof buf);
|
||||
#endif
|
||||
Py_END_ALLOW_THREADS
|
||||
|
||||
if (res == NULL)
|
||||
return posix_error();
|
||||
|
||||
return PyString_FromString(buf);
|
||||
}
|
||||
#else
|
||||
static PyObject *
|
||||
posix_getcwd(PyObject *self, PyObject *noargs)
|
||||
{
|
||||
|
@ -1993,6 +2015,7 @@ posix_getcwd(PyObject *self, PyObject *noargs)
|
|||
|
||||
return dynamic_return;
|
||||
}
|
||||
#endif /* getcwd() NULL/ERANGE workaround. */
|
||||
|
||||
#ifdef Py_USING_UNICODE
|
||||
PyDoc_STRVAR(posix_getcwdu__doc__,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue