diff options
author | Jack Jansen <jack.jansen@cwi.nl> | 2002-05-13 21:23:10 (GMT) |
---|---|---|
committer | Jack Jansen <jack.jansen@cwi.nl> | 2002-05-13 21:23:10 (GMT) |
commit | eaba9d7b2807af62e2b0de0a3fede7b0af82b912 (patch) | |
tree | 3ddfbe559579387123d5689c48f08c9c543192aa /Mac/Modules | |
parent | 23be1ceb512ad8244dfd08b97e6a0dab8404f213 (diff) | |
download | cpython-eaba9d7b2807af62e2b0de0a3fede7b0af82b912.zip cpython-eaba9d7b2807af62e2b0de0a3fede7b0af82b912.tar.gz cpython-eaba9d7b2807af62e2b0de0a3fede7b0af82b912.tar.bz2 |
Added typechecking to the individual python->CF converters, so we can use them in the CF object initializers safely.
Diffstat (limited to 'Mac/Modules')
-rw-r--r-- | Mac/Modules/cf/pycfbridge.c | 18 |
1 files 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; } |