Commit 8b0508ed authored by Victor Stinner's avatar Victor Stinner

Issue #12467: warnings: fix a race condition if a warning is emitted at

shutdown, if globals()['__file__'] is None.
parent aa90e7c5
...@@ -542,6 +542,18 @@ class _WarningsTests(BaseTest): ...@@ -542,6 +542,18 @@ class _WarningsTests(BaseTest):
assert expected_line assert expected_line
self.assertEqual(second_line, expected_line) self.assertEqual(second_line, expected_line)
def test_filename_none(self):
# issue #12467: race condition if a warning is emitted at shutdown
globals_dict = globals()
oldfile = globals_dict['__file__']
try:
with original_warnings.catch_warnings(module=self.module) as w:
self.module.filterwarnings("always", category=UserWarning)
globals_dict['__file__'] = None
original_warnings.warn('test', UserWarning)
finally:
globals_dict['__file__'] = oldfile
class WarningsDisplayTests(unittest.TestCase): class WarningsDisplayTests(unittest.TestCase):
......
...@@ -19,6 +19,9 @@ Core and Builtins ...@@ -19,6 +19,9 @@ Core and Builtins
Library Library
------- -------
- Issue #12467: warnings: fix a race condition if a warning is emitted at
shutdown, if globals()['__file__'] is None.
- Issue #12451: pydoc: importfile() now opens the Python script in binary mode, - Issue #12451: pydoc: importfile() now opens the Python script in binary mode,
instead of text mode using the locale encoding, to avoid encoding issues. instead of text mode using the locale encoding, to avoid encoding issues.
......
...@@ -496,7 +496,7 @@ setup_context(Py_ssize_t stack_level, PyObject **filename, int *lineno, ...@@ -496,7 +496,7 @@ setup_context(Py_ssize_t stack_level, PyObject **filename, int *lineno,
/* Setup filename. */ /* Setup filename. */
*filename = PyDict_GetItemString(globals, "__file__"); *filename = PyDict_GetItemString(globals, "__file__");
if (*filename != NULL) { if (*filename != NULL && PyUnicode_Check(*filename)) {
Py_ssize_t len = PyUnicode_GetSize(*filename); Py_ssize_t len = PyUnicode_GetSize(*filename);
Py_UNICODE *unicode = PyUnicode_AS_UNICODE(*filename); Py_UNICODE *unicode = PyUnicode_AS_UNICODE(*filename);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment