From 5dc644b362a68879a1aa6a2a09eacbb341a85560 Mon Sep 17 00:00:00 2001 From: Johan Dahlin Date: Wed, 4 Aug 2004 21:31:29 +0000 Subject: New test. * tests/enum.py (EnumTest.testOutofBounds): New test. * gobject/pygflags.c (pyg_flags_from_gtype): * gobject/pygenum.c (pyg_enum_from_gtype): Don't segfault on unknown values. --- gobject/pygenum.c | 6 +++++- gobject/pygflags.c | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) (limited to 'gobject') diff --git a/gobject/pygenum.c b/gobject/pygenum.c index c4c974b..80d241a 100644 --- a/gobject/pygenum.c +++ b/gobject/pygenum.c @@ -140,8 +140,12 @@ pyg_enum_from_gtype (GType gtype, int value) values = PyDict_GetItemString(((PyTypeObject *)pyclass)->tp_dict, "__enum_values__"); retval = PyDict_GetItem(values, PyInt_FromLong(value)); + if (!retval) { + PyErr_Clear(); + return PyInt_FromLong(value); + } + Py_INCREF(retval); - return retval; } diff --git a/gobject/pygflags.c b/gobject/pygflags.c index 381a1dd..526368a 100644 --- a/gobject/pygflags.c +++ b/gobject/pygflags.c @@ -168,12 +168,16 @@ pyg_flags_from_gtype (GType gtype, int value) retval = PyDict_GetItem(values, PyInt_FromLong(value)); if (!retval) { PyErr_Clear(); - + + return PyInt_FromLong(value); +#if 0 + /* This breaks repr */ retval = ((PyTypeObject *)pyclass)->tp_alloc((PyTypeObject *)pyclass, 0); g_assert(retval != NULL); ((PyIntObject*)retval)->ob_ival = value; ((PyGFlags*)retval)->gtype = gtype; +#endif } Py_INCREF(retval); -- cgit