summaryrefslogtreecommitdiffstats
path: root/Mac
diff options
context:
space:
mode:
authorJack Jansen <jack.jansen@cwi.nl>2002-05-13 21:23:10 (GMT)
committerJack Jansen <jack.jansen@cwi.nl>2002-05-13 21:23:10 (GMT)
commiteaba9d7b2807af62e2b0de0a3fede7b0af82b912 (patch)
tree3ddfbe559579387123d5689c48f08c9c543192aa /Mac
parent23be1ceb512ad8244dfd08b97e6a0dab8404f213 (diff)
downloadcpython-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')
-rw-r--r--Mac/Modules/cf/pycfbridge.c18
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;
}