Skip to content

Commit

Permalink
pythongh-122334: Fix crash when importing ssl after re-initialization (
Browse files Browse the repository at this point in the history
…pythonGH-122481)

* Fix crash when importing ssl after re-initialization
(cherry picked from commit 9fc1c99)

Co-authored-by: neonene <[email protected]>
  • Loading branch information
neonene authored and miss-islington committed Aug 2, 2024
1 parent 56435a8 commit ff0f006
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 0 deletions.
19 changes: 19 additions & 0 deletions Lib/test/test_embed.py
Original file line number Diff line number Diff line change
Expand Up @@ -460,6 +460,25 @@ def add(cls, slot, own):
self.assertEqual(result, {})
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")
class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix crash when importing :mod:`ssl` after the main interpreter restarts.
13 changes: 13 additions & 0 deletions Python/getargs.c
Original file line number Diff line number Diff line change
Expand Up @@ -2004,6 +2004,19 @@ parser_clear(struct _PyArg_Parser *parser)
if (parser->is_kwtuple_owned) {
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*
Expand Down

0 comments on commit ff0f006

Please sign in to comment.