From eaba9d7b2807af62e2b0de0a3fede7b0af82b912 Mon Sep 17 00:00:00 2001 From: Jack Jansen Date: Mon, 13 May 2002 21:23:10 +0000 Subject: Added typechecking to the individual python->CF converters, so we can use them in the CF object initializers safely. --- Mac/Modules/cf/pycfbridge.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/Mac/Modules/cf/pycfbridge.c b/Mac/Modules/cf/pycfbridge.c index 1b7d7c5..00efa72 100644 --- a/Mac/Modules/cf/pycfbridge.c +++ b/Mac/Modules/cf/pycfbridge.c @@ -172,6 +172,12 @@ PyCF_Python2CF_sequence(PyObject *src, CFArrayRef *dst) { PyObject *item_py = NULL; int size, i; + if( !PySequence_Check(src) ) { + PyErr_Format(PyExc_TypeError, + "Cannot convert %.500s objects to CFArray", + src->ob_type->tp_name); + return 0; + } size = PySequence_Size(src); rv = CFArrayCreateMutable((CFAllocatorRef)NULL, size, &kCFTypeArrayCallBacks); if (rv == NULL) { @@ -205,6 +211,12 @@ PyCF_Python2CF_mapping(PyObject *src, CFDictionaryRef *dst) { PyObject *item_py = NULL, *key_py = NULL, *value_py = NULL; int size, i; + if( !PyMapping_Check(src) ) { + PyErr_Format(PyExc_TypeError, + "Cannot convert %.500s objects to CFDictionary", + src->ob_type->tp_name); + return 0; + } size = PyMapping_Size(src); rv = CFDictionaryCreateMutable((CFAllocatorRef)NULL, size, &kCFTypeDictionaryKeyCallBacks, @@ -241,10 +253,12 @@ err: int PyCF_Python2CF_simple(PyObject *src, CFTypeRef *dst) { +#if 0 if (PyObject_HasAttrString(src, "CFType")) { *dst = PyObject_CallMethod(src, "CFType", ""); return (*dst != NULL); } +#endif if (PyString_Check(src) || PyUnicode_Check(src)) return PyCF_Python2CF_string(src, (CFStringRef *)dst); if (PyBool_Check(src)) { @@ -266,7 +280,7 @@ PyCF_Python2CF_simple(PyObject *src, CFTypeRef *dst) { } PyErr_Format(PyExc_TypeError, - "Cannot convert %.500s objects to CF", + "Cannot convert %.500s objects to CFType", src->ob_type->tp_name); return 0; } @@ -291,7 +305,7 @@ PyCF_Python2CF_string(PyObject *src, CFStringRef *dst) { } err: PyErr_Format(PyExc_TypeError, - "Cannot convert %.500s objects to CF", + "Cannot convert %.500s objects to CFString", src->ob_type->tp_name); return 0; } -- cgit v0.12