summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlessandro Decina <alessandro.decina@collabora.co.uk>2010-08-06 23:18:02 +0200
committerAlessandro Decina <alessandro.decina@collabora.co.uk>2010-08-06 23:18:02 +0200
commitdc6b4f7a0a74d9f514baf503f7df29778d110555 (patch)
tree0c6d6b280423aa8f0c37bc23388e09554e159d1b
parentb1f499ec7e486b9b49b8f5eb55fccc459f4a3760 (diff)
gst.Structure: raise TypeError when assigning None to a key
-rw-r--r--gst/gststructure.override4
-rw-r--r--gst/pygstvalue.c5
-rw-r--r--testsuite/test_caps.py11
3 files changed, 19 insertions, 1 deletions
diff --git a/gst/gststructure.override b/gst/gststructure.override
index fe4e76f..771f83e 100644
--- a/gst/gststructure.override
+++ b/gst/gststructure.override
@@ -110,8 +110,10 @@ _wrap_gst_structure_set_value(PyObject *self, PyObject *args, PyObject *kwargs)
"invalid type name");
return NULL;
}
+ } else if (py_value == Py_None) {
+ PyErr_SetString(PyExc_TypeError, "value can't be None");
+ return NULL;
} else {
- /* Let PyGTK guess a GType for the object. */
type = pyg_type_from_object((PyObject *) py_value->ob_type);
}
diff --git a/gst/pygstvalue.c b/gst/pygstvalue.c
index a783a78..20ad79c 100644
--- a/gst/pygstvalue.c
+++ b/gst/pygstvalue.c
@@ -154,6 +154,11 @@ pygst_value_init_for_pyobject (GValue * value, PyObject * obj)
{
GType t;
+ if (obj == Py_None) {
+ PyErr_SetString (PyExc_TypeError, "value can't be None");
+ return FALSE;
+ }
+
if (!(t = pyg_type_from_object ((PyObject *) obj->ob_type))) {
if (PyObject_IsInstance (obj, gstvalue_class)) {
PyErr_Clear ();
diff --git a/testsuite/test_caps.py b/testsuite/test_caps.py
index 0afac28..dddc507 100644
--- a/testsuite/test_caps.py
+++ b/testsuite/test_caps.py
@@ -180,6 +180,17 @@ class CapsTest(TestCase):
gst.Caps ("some/mime, _double = (double) 1.0; other/mime, _int = { 1, 2 }"),
gst.Caps ("some/mime, _double = (double) 1.0"))
+ def testNoneValue(self):
+ caps = gst.Caps("foo")
+ def invalid_assignment():
+ caps[0]["bar"] = None
+ self.assertRaises(TypeError, invalid_assignment)
+
+ def invalid_set_value():
+ caps[0].set_value("bar", None)
+ self.assertRaises(TypeError, invalid_set_value)
+
+
if __name__ == "__main__":
unittest.main()