diff options
author | Jack Jansen <jack.jansen@cwi.nl> | 2002-05-13 21:23:10 +0000 |
---|---|---|
committer | Jack Jansen <jack.jansen@cwi.nl> | 2002-05-13 21:23:10 +0000 |
commit | d24743806c9608026e699484ca8bb5b52a0a01f9 (patch) | |
tree | 80c576b582b6cb837ab20cad98ca8779a1de0c89 /Mac/Modules/cf | |
parent | fe18ae0a6adbe4d00d5f6b71fe8bd9581e1c2de6 (diff) | |
download | cpython-d24743806c9608026e699484ca8bb5b52a0a01f9.tar.gz |
Added typechecking to the individual python->CF converters, so we can use them in the CF object initializers safely.
Diffstat (limited to 'Mac/Modules/cf')
-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 1b7d7c5950..00efa72519 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; } |