mirror of https://github.com/python/cpython
bpo-31566: Fix an assertion failure in _warnings.warn() in case of a bad __name__ global. (#3717)
This commit is contained in:
parent
91fb0afe18
commit
5d3e80021a
|
@ -856,6 +856,16 @@ class _WarningsTests(BaseTest, unittest.TestCase):
|
|||
self.assertRaises(TypeError):
|
||||
wmod.warn_explicit('foo', Warning, 'bar', 1)
|
||||
|
||||
@support.cpython_only
|
||||
def test_issue31566(self):
|
||||
# warn() shouldn't cause an assertion failure in case of a bad
|
||||
# __name__ global.
|
||||
with original_warnings.catch_warnings(module=self.module):
|
||||
self.module.filterwarnings('error', category=UserWarning)
|
||||
with support.swap_item(globals(), '__name__', b'foo'), \
|
||||
support.swap_item(globals(), '__file__', None):
|
||||
self.assertRaises(UserWarning, self.module.warn, 'bar')
|
||||
|
||||
|
||||
class WarningsDisplayTests(BaseTest):
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Fix an assertion failure in `_warnings.warn()` in case of a bad
|
||||
``__name__`` global. Patch by Oren Milman.
|
|
@ -684,13 +684,14 @@ setup_context(Py_ssize_t stack_level, PyObject **filename, int *lineno,
|
|||
|
||||
/* Setup module. */
|
||||
*module = PyDict_GetItemString(globals, "__name__");
|
||||
if (*module == NULL) {
|
||||
if (*module == Py_None || (*module != NULL && PyUnicode_Check(*module))) {
|
||||
Py_INCREF(*module);
|
||||
}
|
||||
else {
|
||||
*module = PyUnicode_FromString("<string>");
|
||||
if (*module == NULL)
|
||||
goto handle_error;
|
||||
}
|
||||
else
|
||||
Py_INCREF(*module);
|
||||
|
||||
/* Setup filename. */
|
||||
*filename = PyDict_GetItemString(globals, "__file__");
|
||||
|
|
Loading…
Reference in New Issue