https://github.com/python/cpython/commit/d2d490064d8acc7534a0729ef7710b9b013a459f
commit: d2d490064d8acc7534a0729ef7710b9b013a459f
branch: main
author: Serhiy Storchaka <storch...@gmail.com>
committer: serhiy-storchaka <storch...@gmail.com>
date: 2025-04-29T13:55:14Z
summary:

gh-132987: Support __index__() in the select.kqueue_event constructor 
(GH-133094)

files:
M Modules/selectmodule.c

diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c
index d701026b50887c..d234d504cb5167 100644
--- a/Modules/selectmodule.c
+++ b/Modules/selectmodule.c
@@ -1922,14 +1922,27 @@ kqueue_event_init(PyObject *op, PyObject *args, 
PyObject *kwds)
         return -1;
     }
 
-    if (PyLong_Check(pfd)) {
-        self->e.ident = PyLong_AsSize_t(pfd);
+    if (PyIndex_Check(pfd)) {
+        Py_ssize_t bytes = PyLong_AsNativeBytes(pfd,
+                &self->e.ident, sizeof(self->e.ident),
+                Py_ASNATIVEBYTES_NATIVE_ENDIAN |
+                Py_ASNATIVEBYTES_ALLOW_INDEX |
+                Py_ASNATIVEBYTES_REJECT_NEGATIVE |
+                Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
+        if (bytes < 0) {
+            return -1;
+        }
+        if ((size_t)bytes > sizeof(self->e.ident)) {
+            PyErr_SetString(PyExc_OverflowError,
+                            "Python int too large for C kqueue event 
identifier");
+            return -1;
+        }
     }
     else {
         self->e.ident = PyObject_AsFileDescriptor(pfd);
-    }
-    if (PyErr_Occurred()) {
-        return -1;
+        if (PyErr_Occurred()) {
+            return -1;
+        }
     }
     return 0;
 }

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: arch...@mail-archive.com

Reply via email to