]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-132987: Support __index__() in the ssl.SSLContext.options setter (GH-133098)
authorSerhiy Storchaka <storchaka@gmail.com>
Tue, 29 Apr 2025 13:28:47 +0000 (16:28 +0300)
committerGitHub <noreply@github.com>
Tue, 29 Apr 2025 13:28:47 +0000 (16:28 +0300)
Lib/test/test_ssl.py
Modules/_ssl.c

index 1aff8e22683af09b1eb0bb42f4cb7d8c95ae9d63..395b2ef88ab6220c62689a34eaceb0e5927aaf9c 100644 (file)
@@ -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
index 4c5367c3e5cc190df7df6c53b3f5cafe759dac1c..97a29f4d0e1830aae19104538543f9e743d3334c 100644 (file)
@@ -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));