diff options
author | Alessandro Decina <alessandro.decina@collabora.co.uk> | 2010-08-06 23:18:02 +0200 |
---|---|---|
committer | Alessandro Decina <alessandro.decina@collabora.co.uk> | 2010-08-06 23:18:02 +0200 |
commit | dc6b4f7a0a74d9f514baf503f7df29778d110555 (patch) | |
tree | 0c6d6b280423aa8f0c37bc23388e09554e159d1b | |
parent | b1f499ec7e486b9b49b8f5eb55fccc459f4a3760 (diff) |
gst.Structure: raise TypeError when assigning None to a key
-rw-r--r-- | gst/gststructure.override | 4 | ||||
-rw-r--r-- | gst/pygstvalue.c | 5 | ||||
-rw-r--r-- | testsuite/test_caps.py | 11 |
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() |