Added typechecking to the individual python->CF converters, so we can use them in the CF object initializers safely.
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 @@
 	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 @@
 	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 @@
 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 @@
 	}
 			
 	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 @@
 	}
 err:
 	PyErr_Format(PyExc_TypeError,
-		  "Cannot convert %.500s objects to CF",
+		  "Cannot convert %.500s objects to CFString",
 				     src->ob_type->tp_name);
 	return 0;
 }