On 03/27/2012 07:03 AM, Eric Blake wrote:
+int
+libvirt_boolUnwrap(PyObject *obj, bool *val)
+{
+ int ret = -1;
+
+ /* We only accept PyInt_Type, PyLong_Type and PyBool_Type
+ * as the boolean representation.
Why?
> + */
> + if (PyInt_Check(obj) ||
> + PyLong_Check(obj) || PyBool_Check(obj)) {
> + ret = PyObject_IsTrue(obj);
Why not blindly use PyObject_IsTrue(obj), and accept _all_ objects that
can be converted to python truth values, rather than forcing things to
be PyInt, PyBool, or PyLong?
If we don't check here, these APIs which use libvirt_boolUnwrap
will not have any checking for its type of arguments in bool wise.
The upper python code could pass a null list or dictionary as a False.
Maybe a little bit loose use here. but It's fine to blindly use
it actually.
Guannan Ren