summaryrefslogtreecommitdiffstats
path: root/gobject
diff options
context:
space:
mode:
authorGustavo J. A. M. Carneiro <gjc@src.gnome.org>2009-04-05 14:39:35 +0000
committerGustavo J. A. M. Carneiro <gjc@src.gnome.org>2009-04-05 14:39:35 +0000
commit2d08b554a9a944f60d5471a6eca94dc32f42d1ba (patch)
treede55053480e89122f215c8a5bbd93b92994e6f80 /gobject
parent7193a0e14e488ef07f723a0b9f490a03fe291650 (diff)
downloadpygobject-2d08b554a9a944f60d5471a6eca94dc32f42d1ba.tar.gz
pygobject-2d08b554a9a944f60d5471a6eca94dc32f42d1ba.tar.xz
pygobject-2d08b554a9a944f60d5471a6eca94dc32f42d1ba.zip
Bug 577999 – converting a negative long Python value to a GUINT64 GValue doesn't error out as it should
svn path=/trunk/; revision=1054
Diffstat (limited to 'gobject')
-rw-r--r--gobject/pygtype.c54
1 files changed, 16 insertions, 38 deletions
diff --git a/gobject/pygtype.c b/gobject/pygtype.c
index 8f9b233..a9b18a4 100644
--- a/gobject/pygtype.c
+++ b/gobject/pygtype.c
@@ -716,11 +716,6 @@ pyg_value_from_pyobject(GValue *value, PyObject *obj)
break;
case G_TYPE_INT:
g_value_set_int(value, _PyLong_AsLong(obj));
- if (PyErr_Occurred()) {
- g_value_unset(value);
- PyErr_Clear();
- return -1;
- }
break;
case G_TYPE_UINT:
{
@@ -734,21 +729,11 @@ pyg_value_from_pyobject(GValue *value, PyObject *obj)
return -1;
} else {
g_value_set_uint(value, PyLong_AsUnsignedLong(obj));
- if (PyErr_Occurred()) {
- g_value_unset(value);
- PyErr_Clear();
- return -1;
- }
}
}
break;
case G_TYPE_LONG:
g_value_set_long(value, _PyLong_AsLong(obj));
- if (PyErr_Occurred()) {
- g_value_unset(value);
- PyErr_Clear();
- return -1;
- }
break;
case G_TYPE_ULONG:
{
@@ -762,26 +747,24 @@ pyg_value_from_pyobject(GValue *value, PyObject *obj)
return -1;
} else {
g_value_set_ulong(value, PyLong_AsUnsignedLong(obj));
- if (PyErr_Occurred()) {
- g_value_unset(value);
- PyErr_Clear();
- return -1;
- }
}
}
break;
case G_TYPE_INT64:
g_value_set_int64(value, PyLong_AsLongLong(obj));
- if (PyErr_Occurred()) {
- g_value_unset(value);
- PyErr_Clear();
- return -1;
- }
break;
case G_TYPE_UINT64:
- if (_PyLong_Check(obj))
- g_value_set_uint64(value, _PyLong_AsLong(obj));
- else if (PyLong_Check(obj))
+#if PY_VERSION_HEX < 0x03000000
+ if (PyInt_Check(obj)) {
+ long v = PyInt_AsLong(obj);
+ if (v < 0) {
+ PyErr_SetString(PyExc_OverflowError, "negative value not allowed for uint64 property");
+ return -1;
+ }
+ g_value_set_uint64(value, v);
+ } else
+#endif
+ if (PyLong_Check(obj))
g_value_set_uint64(value, PyLong_AsUnsignedLongLong(obj));
else
return -1;
@@ -808,19 +791,9 @@ pyg_value_from_pyobject(GValue *value, PyObject *obj)
break;
case G_TYPE_FLOAT:
g_value_set_float(value, PyFloat_AsDouble(obj));
- if (PyErr_Occurred()) {
- g_value_unset(value);
- PyErr_Clear();
- return -1;
- }
break;
case G_TYPE_DOUBLE:
g_value_set_double(value, PyFloat_AsDouble(obj));
- if (PyErr_Occurred()) {
- g_value_unset(value);
- PyErr_Clear();
- return -1;
- }
break;
case G_TYPE_STRING:
if (obj == Py_None)
@@ -915,6 +888,11 @@ pyg_value_from_pyobject(GValue *value, PyObject *obj)
break;
}
}
+ if (PyErr_Occurred()) {
+ g_value_unset(value);
+ PyErr_Clear();
+ return -1;
+ }
return 0;
}