mirror of
https://github.com/python/cpython.git
synced 2025-07-23 11:15:24 +00:00
gh-122334: Fix crash when importing ssl after re-initialization (#122481)
* Fix crash when importing ssl after re-initialization
This commit is contained in:
parent
b5e6fb39a2
commit
9fc1c992d6
3 changed files with 33 additions and 0 deletions
|
@ -461,6 +461,25 @@ class EmbeddingTests(EmbeddingTestsMixin, unittest.TestCase):
|
||||||
self.assertEqual(result, {})
|
self.assertEqual(result, {})
|
||||||
self.assertEqual(out, '')
|
self.assertEqual(out, '')
|
||||||
|
|
||||||
|
def test_getargs_reset_static_parser(self):
|
||||||
|
# Test _PyArg_Parser initializations via _PyArg_UnpackKeywords()
|
||||||
|
# https://github.com/python/cpython/issues/122334
|
||||||
|
code = textwrap.dedent("""
|
||||||
|
import _ssl
|
||||||
|
_ssl.txt2obj(txt='1.3')
|
||||||
|
print('1')
|
||||||
|
|
||||||
|
import _queue
|
||||||
|
_queue.SimpleQueue().put_nowait(item=None)
|
||||||
|
print('2')
|
||||||
|
|
||||||
|
import _zoneinfo
|
||||||
|
_zoneinfo.ZoneInfo.clear_cache(only_keys=['Foo/Bar'])
|
||||||
|
print('3')
|
||||||
|
""")
|
||||||
|
out, err = self.run_embedded_interpreter("test_repeated_init_exec", code)
|
||||||
|
self.assertEqual(out, '1\n2\n3\n' * INIT_LOOPS)
|
||||||
|
|
||||||
|
|
||||||
@unittest.skipIf(_testinternalcapi is None, "requires _testinternalcapi")
|
@unittest.skipIf(_testinternalcapi is None, "requires _testinternalcapi")
|
||||||
class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
|
class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Fix crash when importing :mod:`ssl` after the main interpreter restarts.
|
|
@ -2030,6 +2030,19 @@ parser_clear(struct _PyArg_Parser *parser)
|
||||||
if (parser->is_kwtuple_owned) {
|
if (parser->is_kwtuple_owned) {
|
||||||
Py_CLEAR(parser->kwtuple);
|
Py_CLEAR(parser->kwtuple);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (parser->format) {
|
||||||
|
parser->fname = NULL;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
assert(parser->fname != NULL);
|
||||||
|
}
|
||||||
|
parser->custom_msg = NULL;
|
||||||
|
parser->pos = 0;
|
||||||
|
parser->min = 0;
|
||||||
|
parser->max = 0;
|
||||||
|
parser->is_kwtuple_owned = 0;
|
||||||
|
parser->once.v = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject*
|
static PyObject*
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue