[Python-checkins] r81383 - in python/branches/release31-maint: Lib/test/test_warnings.py Misc/NEWS Python/_warnings.c Python/pythonrun.c
victor.stinner
python-checkins at python.org
Thu May 20 23:00:34 CEST 2010
Author: victor.stinner
Date: Thu May 20 23:00:34 2010
New Revision: 81383
Log:
Recorded merge of revisions 81364 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
........
r81364 | victor.stinner | 2010-05-19 22:40:50 +0200 (mer., 19 mai 2010) | 3 lines
Issue #8766: Initialize _warnings module before importing the first module.
Fix a crash if an empty directory called "encodings" exists in sys.path.
........
Modified:
python/branches/release31-maint/ (props changed)
python/branches/release31-maint/Lib/test/test_warnings.py
python/branches/release31-maint/Misc/NEWS
python/branches/release31-maint/Python/_warnings.c
python/branches/release31-maint/Python/pythonrun.c
Modified: python/branches/release31-maint/Lib/test/test_warnings.py
==============================================================================
--- python/branches/release31-maint/Lib/test/test_warnings.py (original)
+++ python/branches/release31-maint/Lib/test/test_warnings.py Thu May 20 23:00:34 2010
@@ -4,6 +4,9 @@
from io import StringIO
import sys
import unittest
+import shutil
+import tempfile
+import subprocess
from test import support
from test import warning_tests
@@ -670,18 +673,46 @@
module = py_warnings
+class BootstrapTest(unittest.TestCase):
+ def test_issue_8766(self):
+ # "import encodings" emits a warning whereas the warnings is not loaded
+ # or not completly loaded (warnings imports indirectly encodings by
+ # importing linecache) yet
+ old_cwd = os.getcwd()
+ try:
+ cwd = tempfile.mkdtemp()
+ try:
+ os.chdir(cwd)
+ os.mkdir('encodings')
+ env = os.environ.copy()
+ env['PYTHONPATH'] = cwd
+
+ # encodings loaded by initfsencoding()
+ retcode = subprocess.call([sys.executable, '-c', 'pass'], env=env)
+ self.assertEqual(retcode, 0)
+
+ # Use -W to load warnings module at startup
+ retcode = subprocess.call(
+ [sys.executable, '-c', 'pass', '-W', 'always'],
+ env=env)
+ self.assertEqual(retcode, 0)
+ finally:
+ shutil.rmtree(cwd)
+ finally:
+ os.chdir(old_cwd)
+
def test_main():
py_warnings.onceregistry.clear()
c_warnings.onceregistry.clear()
- support.run_unittest(CFilterTests,
- PyFilterTests,
- CWarnTests,
- PyWarnTests,
- CWCmdLineTests, PyWCmdLineTests,
- _WarningsTests,
- CWarningsDisplayTests, PyWarningsDisplayTests,
- CCatchWarningTests, PyCatchWarningTests,
- )
+ support.run_unittest(
+ CFilterTests, PyFilterTests,
+ CWarnTests, PyWarnTests,
+ CWCmdLineTests, PyWCmdLineTests,
+ _WarningsTests,
+ CWarningsDisplayTests, PyWarningsDisplayTests,
+ CCatchWarningTests, PyCatchWarningTests,
+ BootstrapTest,
+ )
if __name__ == "__main__":
Modified: python/branches/release31-maint/Misc/NEWS
==============================================================================
--- python/branches/release31-maint/Misc/NEWS (original)
+++ python/branches/release31-maint/Misc/NEWS Thu May 20 23:00:34 2010
@@ -12,6 +12,9 @@
Core and Builtins
-----------------
+- Issue #8766: Initialize _warnings module before importing the first module.
+ Fix a crash if an empty directory called "encodings" exists in sys.path.
+
- PyObject_Dump() encodes unicode objects to utf8 with backslashreplace
(instead of strict) error handler to escape surrogates
Modified: python/branches/release31-maint/Python/_warnings.c
==============================================================================
--- python/branches/release31-maint/Python/_warnings.c (original)
+++ python/branches/release31-maint/Python/_warnings.c Thu May 20 23:00:34 2010
@@ -116,7 +116,7 @@
_filters = warnings_filters;
}
- if (!PyList_Check(_filters)) {
+ if (_filters == NULL || !PyList_Check(_filters)) {
PyErr_SetString(PyExc_ValueError,
MODULE_NAME ".filters must be a list");
return NULL;
Modified: python/branches/release31-maint/Python/pythonrun.c
==============================================================================
--- python/branches/release31-maint/Python/pythonrun.c (original)
+++ python/branches/release31-maint/Python/pythonrun.c Thu May 20 23:00:34 2010
@@ -264,6 +264,9 @@
_PyImportHooks_Init();
+ /* Initialize _warnings. */
+ _PyWarnings_Init();
+
#if defined(HAVE_LANGINFO_H) && defined(CODESET)
/* On Unix, set the file system encoding according to the
user's preference, if the CODESET names a well-known
@@ -284,7 +287,6 @@
initsigs(); /* Signal handling stuff, including initintr() */
/* Initialize warnings. */
- _PyWarnings_Init();
if (PySys_HasWarnOptions()) {
PyObject *warnings_module = PyImport_ImportModule("warnings");
if (!warnings_module)
More information about the Python-checkins
mailing list