Kaydet (Commit) f1ff88f0 authored tarafından Mark Dickinson's avatar Mark Dickinson

Fix incorrect error checks in structmember.c (backport of r78920 from py3k).

üst 45534cec
...@@ -257,12 +257,13 @@ PyMember_SetOne(char *addr, PyMemberDef *l, PyObject *v) ...@@ -257,12 +257,13 @@ PyMember_SetOne(char *addr, PyMemberDef *l, PyObject *v)
} }
case T_UINT:{ case T_UINT:{
unsigned long ulong_val = PyLong_AsUnsignedLong(v); unsigned long ulong_val = PyLong_AsUnsignedLong(v);
if ((ulong_val == (unsigned int)-1) && PyErr_Occurred()) { if ((ulong_val == (unsigned long)-1) && PyErr_Occurred()) {
/* XXX: For compatibility, accept negative int values /* XXX: For compatibility, accept negative int values
as well. */ as well. */
PyErr_Clear(); PyErr_Clear();
ulong_val = PyLong_AsLong(v); ulong_val = PyLong_AsLong(v);
if ((ulong_val == (unsigned int)-1) && PyErr_Occurred()) if ((ulong_val == (unsigned long)-1) &&
PyErr_Occurred())
return -1; return -1;
*(unsigned int *)addr = (unsigned int)ulong_val; *(unsigned int *)addr = (unsigned int)ulong_val;
WARN("Writing negative value into unsigned field"); WARN("Writing negative value into unsigned field");
...@@ -286,7 +287,7 @@ PyMember_SetOne(char *addr, PyMemberDef *l, PyObject *v) ...@@ -286,7 +287,7 @@ PyMember_SetOne(char *addr, PyMemberDef *l, PyObject *v)
as well. */ as well. */
PyErr_Clear(); PyErr_Clear();
*(unsigned long*)addr = PyLong_AsLong(v); *(unsigned long*)addr = PyLong_AsLong(v);
if ((*(unsigned long*)addr == (unsigned int)-1) if ((*(unsigned long*)addr == (unsigned long)-1)
&& PyErr_Occurred()) && PyErr_Occurred())
return -1; return -1;
WARN("Writing negative value into unsigned field"); WARN("Writing negative value into unsigned field");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment