[3.7] bpo-37170: Fix the cast on error in PyLong_AsUnsignedLongLongMask() (GH-13860) (GH-13896)
(cherry picked from commit dc2476500d
)
Co-authored-by: Zackery Spytz <zspytz@gmail.com>
This commit is contained in:
parent
4ea9dbda4a
commit
e36ed475ea
|
@ -259,7 +259,8 @@ distinguished from a number. Use :c:func:`PyErr_Occurred` to disambiguate.
|
||||||
If the value of *obj* is out of range for an :c:type:`unsigned long`,
|
If the value of *obj* is out of range for an :c:type:`unsigned long`,
|
||||||
return the reduction of that value modulo ``ULONG_MAX + 1``.
|
return the reduction of that value modulo ``ULONG_MAX + 1``.
|
||||||
|
|
||||||
Returns ``-1`` on error. Use :c:func:`PyErr_Occurred` to disambiguate.
|
Returns ``(unsigned long)-1`` on error. Use :c:func:`PyErr_Occurred` to
|
||||||
|
disambiguate.
|
||||||
|
|
||||||
|
|
||||||
.. c:function:: unsigned long long PyLong_AsUnsignedLongLongMask(PyObject *obj)
|
.. c:function:: unsigned long long PyLong_AsUnsignedLongLongMask(PyObject *obj)
|
||||||
|
@ -271,7 +272,8 @@ distinguished from a number. Use :c:func:`PyErr_Occurred` to disambiguate.
|
||||||
If the value of *obj* is out of range for an :c:type:`unsigned long long`,
|
If the value of *obj* is out of range for an :c:type:`unsigned long long`,
|
||||||
return the reduction of that value modulo ``PY_ULLONG_MAX + 1``.
|
return the reduction of that value modulo ``PY_ULLONG_MAX + 1``.
|
||||||
|
|
||||||
Returns ``-1`` on error. Use :c:func:`PyErr_Occurred` to disambiguate.
|
Returns ``(unsigned long long)-1`` on error. Use :c:func:`PyErr_Occurred`
|
||||||
|
to disambiguate.
|
||||||
|
|
||||||
|
|
||||||
.. c:function:: double PyLong_AsDouble(PyObject *pylong)
|
.. c:function:: double PyLong_AsDouble(PyObject *pylong)
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Fix the cast on error in :c:func:`PyLong_AsUnsignedLongLongMask()`.
|
|
@ -816,6 +816,26 @@ test_long_as_size_t(PyObject *self)
|
||||||
return Py_None;
|
return Py_None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
test_long_as_unsigned_long_long_mask(PyObject *self,
|
||||||
|
PyObject *Py_UNUSED(ignored))
|
||||||
|
{
|
||||||
|
unsigned long long res = PyLong_AsUnsignedLongLongMask(NULL);
|
||||||
|
|
||||||
|
if (res != (unsigned long long)-1 || !PyErr_Occurred()) {
|
||||||
|
return raiseTestError("test_long_as_unsigned_long_long_mask",
|
||||||
|
"PyLong_AsUnsignedLongLongMask(NULL) didn't "
|
||||||
|
"complain");
|
||||||
|
}
|
||||||
|
if (!PyErr_ExceptionMatches(PyExc_SystemError)) {
|
||||||
|
return raiseTestError("test_long_as_unsigned_long_long_mask",
|
||||||
|
"PyLong_AsUnsignedLongLongMask(NULL) raised "
|
||||||
|
"something other than SystemError");
|
||||||
|
}
|
||||||
|
PyErr_Clear();
|
||||||
|
Py_RETURN_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
/* Test the PyLong_AsDouble API. At present this just tests that
|
/* Test the PyLong_AsDouble API. At present this just tests that
|
||||||
non-integer arguments are handled correctly.
|
non-integer arguments are handled correctly.
|
||||||
*/
|
*/
|
||||||
|
@ -4663,6 +4683,8 @@ static PyMethodDef TestMethods[] = {
|
||||||
METH_NOARGS},
|
METH_NOARGS},
|
||||||
{"test_long_as_double", (PyCFunction)test_long_as_double,METH_NOARGS},
|
{"test_long_as_double", (PyCFunction)test_long_as_double,METH_NOARGS},
|
||||||
{"test_long_as_size_t", (PyCFunction)test_long_as_size_t,METH_NOARGS},
|
{"test_long_as_size_t", (PyCFunction)test_long_as_size_t,METH_NOARGS},
|
||||||
|
{"test_long_as_unsigned_long_long_mask",
|
||||||
|
(PyCFunction)test_long_as_unsigned_long_long_mask, METH_NOARGS},
|
||||||
{"test_long_numbits", (PyCFunction)test_long_numbits, METH_NOARGS},
|
{"test_long_numbits", (PyCFunction)test_long_numbits, METH_NOARGS},
|
||||||
{"test_k_code", (PyCFunction)test_k_code, METH_NOARGS},
|
{"test_k_code", (PyCFunction)test_k_code, METH_NOARGS},
|
||||||
{"test_empty_argparse", (PyCFunction)test_empty_argparse,METH_NOARGS},
|
{"test_empty_argparse", (PyCFunction)test_empty_argparse,METH_NOARGS},
|
||||||
|
|
|
@ -1309,7 +1309,7 @@ _PyLong_AsUnsignedLongLongMask(PyObject *vv)
|
||||||
|
|
||||||
if (vv == NULL || !PyLong_Check(vv)) {
|
if (vv == NULL || !PyLong_Check(vv)) {
|
||||||
PyErr_BadInternalCall();
|
PyErr_BadInternalCall();
|
||||||
return (unsigned long) -1;
|
return (unsigned long long) -1;
|
||||||
}
|
}
|
||||||
v = (PyLongObject *)vv;
|
v = (PyLongObject *)vv;
|
||||||
switch(Py_SIZE(v)) {
|
switch(Py_SIZE(v)) {
|
||||||
|
@ -1337,7 +1337,7 @@ PyLong_AsUnsignedLongLongMask(PyObject *op)
|
||||||
|
|
||||||
if (op == NULL) {
|
if (op == NULL) {
|
||||||
PyErr_BadInternalCall();
|
PyErr_BadInternalCall();
|
||||||
return (unsigned long)-1;
|
return (unsigned long long)-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PyLong_Check(op)) {
|
if (PyLong_Check(op)) {
|
||||||
|
|
Loading…
Reference in New Issue