From 0fb4c38c273213394b6c5e28432a3dcfc752d289 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Tue, 29 Apr 2025 16:28:47 +0300 Subject: gh-132987: Support __index__() in the ssl.SSLContext.options setter (GH-133098) --- Lib/test/test_ssl.py | 2 +- Modules/_ssl.c | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 1aff8e2..395b2ef 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -986,7 +986,7 @@ class ContextTests(unittest.TestCase): self.assertEqual(0, ctx.options & ~ssl.OP_NO_SSLv3) # invalid options - with self.assertRaises(OverflowError): + with self.assertRaises(ValueError): ctx.options = -1 with self.assertRaises(OverflowError): ctx.options = 2 ** 100 diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 4c5367c..97a29f4 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -27,6 +27,7 @@ #include "Python.h" #include "pycore_fileutils.h" // _PyIsSelectable_fd() +#include "pycore_long.h" // _PyLong_UnsignedLongLong_Converter() #include "pycore_pyerrors.h" // _PyErr_ChainExceptions1() #include "pycore_time.h" // _PyDeadline_Init() @@ -3812,7 +3813,6 @@ static int _ssl__SSLContext_options_set_impl(PySSLContext *self, PyObject *value) /*[clinic end generated code: output=92ca34731ece5dbb input=2b94bf789e9ae5dd]*/ { - PyObject *new_opts_obj; unsigned long long new_opts_arg; uint64_t new_opts, opts, clear, set; uint64_t opt_no = ( @@ -3820,11 +3820,7 @@ _ssl__SSLContext_options_set_impl(PySSLContext *self, PyObject *value) SSL_OP_NO_TLSv1_1 | SSL_OP_NO_TLSv1_2 | SSL_OP_NO_TLSv1_3 ); - if (!PyArg_Parse(value, "O!", &PyLong_Type, &new_opts_obj)) { - return -1; - } - new_opts_arg = PyLong_AsUnsignedLongLong(new_opts_obj); - if (new_opts_arg == (unsigned long long)-1 && PyErr_Occurred()) { + if (!PyArg_Parse(value, "O&", _PyLong_UnsignedLongLong_Converter, &new_opts_arg)) { return -1; } Py_BUILD_ASSERT(sizeof(new_opts) >= sizeof(new_opts_arg)); -- cgit v0.12