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. ........
This commit is contained in:
parent
784c027d18
commit
148051a054
|
@ -4,6 +4,9 @@ import os
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
import sys
|
import sys
|
||||||
import unittest
|
import unittest
|
||||||
|
import shutil
|
||||||
|
import tempfile
|
||||||
|
import subprocess
|
||||||
from test import support
|
from test import support
|
||||||
|
|
||||||
from test import warning_tests
|
from test import warning_tests
|
||||||
|
@ -670,18 +673,46 @@ class PyCatchWarningTests(CatchWarningTests):
|
||||||
module = py_warnings
|
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():
|
def test_main():
|
||||||
py_warnings.onceregistry.clear()
|
py_warnings.onceregistry.clear()
|
||||||
c_warnings.onceregistry.clear()
|
c_warnings.onceregistry.clear()
|
||||||
support.run_unittest(CFilterTests,
|
support.run_unittest(
|
||||||
PyFilterTests,
|
CFilterTests, PyFilterTests,
|
||||||
CWarnTests,
|
CWarnTests, PyWarnTests,
|
||||||
PyWarnTests,
|
CWCmdLineTests, PyWCmdLineTests,
|
||||||
CWCmdLineTests, PyWCmdLineTests,
|
_WarningsTests,
|
||||||
_WarningsTests,
|
CWarningsDisplayTests, PyWarningsDisplayTests,
|
||||||
CWarningsDisplayTests, PyWarningsDisplayTests,
|
CCatchWarningTests, PyCatchWarningTests,
|
||||||
CCatchWarningTests, PyCatchWarningTests,
|
BootstrapTest,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
@ -12,6 +12,9 @@ What's New in Python 3.1.3?
|
||||||
Core and Builtins
|
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
|
- PyObject_Dump() encodes unicode objects to utf8 with backslashreplace
|
||||||
(instead of strict) error handler to escape surrogates
|
(instead of strict) error handler to escape surrogates
|
||||||
|
|
||||||
|
|
|
@ -116,7 +116,7 @@ get_filter(PyObject *category, PyObject *text, Py_ssize_t lineno,
|
||||||
_filters = warnings_filters;
|
_filters = warnings_filters;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!PyList_Check(_filters)) {
|
if (_filters == NULL || !PyList_Check(_filters)) {
|
||||||
PyErr_SetString(PyExc_ValueError,
|
PyErr_SetString(PyExc_ValueError,
|
||||||
MODULE_NAME ".filters must be a list");
|
MODULE_NAME ".filters must be a list");
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -264,6 +264,9 @@ Py_InitializeEx(int install_sigs)
|
||||||
|
|
||||||
_PyImportHooks_Init();
|
_PyImportHooks_Init();
|
||||||
|
|
||||||
|
/* Initialize _warnings. */
|
||||||
|
_PyWarnings_Init();
|
||||||
|
|
||||||
#if defined(HAVE_LANGINFO_H) && defined(CODESET)
|
#if defined(HAVE_LANGINFO_H) && defined(CODESET)
|
||||||
/* On Unix, set the file system encoding according to the
|
/* On Unix, set the file system encoding according to the
|
||||||
user's preference, if the CODESET names a well-known
|
user's preference, if the CODESET names a well-known
|
||||||
|
@ -284,7 +287,6 @@ Py_InitializeEx(int install_sigs)
|
||||||
initsigs(); /* Signal handling stuff, including initintr() */
|
initsigs(); /* Signal handling stuff, including initintr() */
|
||||||
|
|
||||||
/* Initialize warnings. */
|
/* Initialize warnings. */
|
||||||
_PyWarnings_Init();
|
|
||||||
if (PySys_HasWarnOptions()) {
|
if (PySys_HasWarnOptions()) {
|
||||||
PyObject *warnings_module = PyImport_ImportModule("warnings");
|
PyObject *warnings_module = PyImport_ImportModule("warnings");
|
||||||
if (!warnings_module)
|
if (!warnings_module)
|
||||||
|
|
Loading…
Reference in New Issue