mirror of
https://github.com/python/cpython.git
synced 2024-11-24 17:47:13 +01:00
[3.11] gh-117021: Fix integer overflow in PyLong_AsPid() on non-Windows 64-bit platforms (GH-117064) (GH-117070) (GH-117075)
(cherry picked from commitda2f9d1417
) Co-authored-by: Serhiy Storchaka <storchaka@gmail.com> (cherry picked from commit519b2ae22b
)
This commit is contained in:
parent
2f1806ed8a
commit
7323c4dd07
@ -49,6 +49,10 @@
|
||||
#include "bytearrayobject.h"
|
||||
#include "bytesobject.h"
|
||||
#include "unicodeobject.h"
|
||||
#include "cpython/code.h"
|
||||
#include "cpython/initconfig.h"
|
||||
#include "pystate.h"
|
||||
#include "pyerrors.h"
|
||||
#include "longobject.h"
|
||||
#include "cpython/longintrepr.h"
|
||||
#include "boolobject.h"
|
||||
@ -68,14 +72,11 @@
|
||||
#include "cpython/classobject.h"
|
||||
#include "fileobject.h"
|
||||
#include "pycapsule.h"
|
||||
#include "cpython/code.h"
|
||||
#include "pyframe.h"
|
||||
#include "traceback.h"
|
||||
#include "sliceobject.h"
|
||||
#include "cpython/cellobject.h"
|
||||
#include "iterobject.h"
|
||||
#include "cpython/initconfig.h"
|
||||
#include "pystate.h"
|
||||
#include "cpython/genobject.h"
|
||||
#include "descrobject.h"
|
||||
#include "genericaliasobject.h"
|
||||
@ -85,7 +86,6 @@
|
||||
#include "cpython/picklebufobject.h"
|
||||
#include "cpython/pytime.h"
|
||||
#include "codecs.h"
|
||||
#include "pyerrors.h"
|
||||
#include "pythread.h"
|
||||
#include "cpython/context.h"
|
||||
#include "modsupport.h"
|
||||
|
@ -34,7 +34,24 @@ PyAPI_FUNC(PyObject *) PyLong_GetInfo(void);
|
||||
#if !defined(SIZEOF_PID_T) || SIZEOF_PID_T == SIZEOF_INT
|
||||
#define _Py_PARSE_PID "i"
|
||||
#define PyLong_FromPid PyLong_FromLong
|
||||
#define PyLong_AsPid PyLong_AsLong
|
||||
# ifndef Py_LIMITED_API
|
||||
# define PyLong_AsPid _PyLong_AsInt
|
||||
# elif SIZEOF_INT == SIZEOF_LONG
|
||||
# define PyLong_AsPid PyLong_AsLong
|
||||
# else
|
||||
static inline int
|
||||
PyLong_AsPid(PyObject *obj)
|
||||
{
|
||||
int overflow;
|
||||
long result = PyLong_AsLongAndOverflow(obj, &overflow);
|
||||
if (overflow || result > INT_MAX || result < INT_MIN) {
|
||||
PyErr_SetString(PyExc_OverflowError,
|
||||
"Python int too large to convert to C int");
|
||||
return -1;
|
||||
}
|
||||
return (int)result;
|
||||
}
|
||||
# endif
|
||||
#elif SIZEOF_PID_T == SIZEOF_LONG
|
||||
#define _Py_PARSE_PID "l"
|
||||
#define PyLong_FromPid PyLong_FromLong
|
||||
|
@ -0,0 +1,2 @@
|
||||
Fix integer overflow in :c:func:`PyLong_AsPid` on non-Windows 64-bit
|
||||
platforms.
|
@ -8221,6 +8221,7 @@ PyInit__testcapi(void)
|
||||
PyModule_AddObject(m, "PY_SSIZE_T_MAX", PyLong_FromSsize_t(PY_SSIZE_T_MAX));
|
||||
PyModule_AddObject(m, "PY_SSIZE_T_MIN", PyLong_FromSsize_t(PY_SSIZE_T_MIN));
|
||||
PyModule_AddObject(m, "SIZEOF_TIME_T", PyLong_FromSsize_t(sizeof(time_t)));
|
||||
PyModule_AddObject(m, "SIZEOF_PID_T", PyLong_FromSsize_t(sizeof(pid_t)));
|
||||
PyModule_AddObject(m, "Py_Version", PyLong_FromUnsignedLong(Py_Version));
|
||||
Py_INCREF(&PyInstanceMethod_Type);
|
||||
PyModule_AddObject(m, "instancemethod", (PyObject *)&PyInstanceMethod_Type);
|
||||
|
Loading…
Reference in New Issue
Block a user