[Python-checkins] r82975 - in python/branches/release26-maint: Lib/test/test_posix.py Modules/posixmodule.c

stefan.krah python-checkins at python.org
Mon Jul 19 17:43:23 CEST 2010


Author: stefan.krah
Date: Mon Jul 19 17:43:23 2010
New Revision: 82975
Log:
Merged revisions 82853-82854 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/branches/release27-maint
........
 r82853 | stefan.krah | 2010年07月13日 21:17:08 +0200 (2010年7月13日) | 4 lines
 
 Issue #9185: On Solaris and OpenBSD, posix_getcwd() could loop indefinitely
 if the path length exceeded PATH_MAX.
........
 r82854 | stefan.krah | 2010年07月13日 21:40:00 +0200 (2010年7月13日) | 3 lines
 
 Remove PYOS_OS2 special cases from the Solaris/OpenBSD section.
........
Modified:
 python/branches/release26-maint/ (props changed)
 python/branches/release26-maint/Lib/test/test_posix.py
 python/branches/release26-maint/Modules/posixmodule.c
Modified: python/branches/release26-maint/Lib/test/test_posix.py
==============================================================================
--- python/branches/release26-maint/Lib/test/test_posix.py	(original)
+++ python/branches/release26-maint/Lib/test/test_posix.py	Mon Jul 19 17:43:23 2010
@@ -11,6 +11,7 @@
 import os
 import pwd
 import shutil
+import sys
 import unittest
 import warnings
 warnings.filterwarnings('ignore', '.* potential security risk .*',
@@ -287,8 +288,13 @@
 os.chdir(dirname)
 try:
 os.getcwd()
- if current_path_length < 1027:
+ if current_path_length < 4099:
 _create_and_do_getcwd(dirname, current_path_length + len(dirname) + 1)
+ except OSError as e:
+ expected_errno = errno.ENAMETOOLONG
+ if 'sunos' in sys.platform or 'openbsd' in sys.platform:
+ expected_errno = errno.ERANGE # Issue 9185
+ self.assertEqual(e.errno, expected_errno)
 finally:
 os.chdir('..')
 os.rmdir(dirname)
Modified: python/branches/release26-maint/Modules/posixmodule.c
==============================================================================
--- python/branches/release26-maint/Modules/posixmodule.c	(original)
+++ python/branches/release26-maint/Modules/posixmodule.c	Mon Jul 19 17:43:23 2010
@@ -1970,6 +1970,24 @@
 "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
+ res = getcwd(buf, sizeof buf);
+ Py_END_ALLOW_THREADS
+
+ if (res == NULL)
+ return posix_error();
+
+ return PyString_FromString(buf);
+}
+#else
 static PyObject *
 posix_getcwd(PyObject *self, PyObject *noargs)
 {
@@ -2006,6 +2024,7 @@
 
 return dynamic_return;
 }
+#endif /* getcwd() NULL/ERANGE workaround. */
 
 #ifdef Py_USING_UNICODE
 PyDoc_STRVAR(posix_getcwdu__doc__,


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /