[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    koffice/libs/kross/python
From:       Sebastian Sauer <mail () dipe ! org>
Date:       2006-12-08 8:53:48
Message-ID: 1165568028.810637.12184.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 611457 by sebsauer:

Check if it's really a PythonExtension and throw an err if not rather then crashing


 M  +31 -21    pythonvariant.cpp  


--- trunk/koffice/libs/kross/python/pythonvariant.cpp #611456:611457
@@ -119,10 +119,17 @@
 
 QVariant PythonType<QVariant>::toVariant(const Py::Object& obj)
 {
-    if(obj == Py::None())
+    if(obj == Py::None()) {
+        #ifdef KROSS_PYTHON_VARIANT_DEBUG
+            krossdebug( QString("PythonType<QVariant>::toVariant Py::None") );
+        #endif
         return QVariant();
+    }
 
     PyTypeObject *type = (PyTypeObject*) obj.type().ptr();
+    #ifdef KROSS_PYTHON_VARIANT_DEBUG
+        krossdebug( QString("PythonType<QVariant>::toVariant \
type=%1").arg(type->tp_name) ); +    #endif
 
     if(type == &PyInt_Type)
         return PythonType<int>::toVariant(obj);
@@ -132,10 +139,8 @@
         return PythonType<double>::toVariant(obj);
     if(type == &PyBool_Type)
         return PythonType<bool>::toVariant(obj);
-
     if(PyType_IsSubtype(type,&PyString_Type))
         return PythonType<QString>::toVariant(obj);
-
     if(type == &PyTuple_Type)
         return PythonType<QVariantList,Py::Tuple>::toVariant(Py::Tuple(obj));
     if(type == &PyList_Type)
@@ -143,30 +148,35 @@
     if(type == &PyDict_Type)
         return PythonType<QVariantMap,Py::Dict>::toVariant(Py::Dict(obj.ptr()));
 
-    if(obj.isInstance()) {
-        #ifdef KROSS_PYTHON_VARIANT_DEBUG
+    #ifdef KROSS_PYTHON_VARIANT_DEBUG
+        if(obj.isInstance()) {
             krossdebug( QString("PythonType<QVariant>::toVariant IsInstance=TRUE") \
                );
-        #endif
-        //return new PythonType(object);
-    }
+            //return new PythonType(object);
+        }
+    #endif
 
-    Py::ExtensionObject<PythonExtension> extobj(obj);
-    PythonExtension* extension = extobj.extensionObject();
-    if(! extension) {
+    if(PythonExtension::check(obj.ptr())) {
+        Py::ExtensionObject<PythonExtension> extobj(obj);
+        PythonExtension* extension = extobj.extensionObject();
+        if(! extension) {
+            #ifdef KROSS_PYTHON_VARIANT_DEBUG
+                krosswarning( QString("PythonType<QVariant>::toVariant Failed to \
determinate PythonExtension for object=%1").arg(obj.as_string().c_str()) ); +         \
#endif +            throw Py::RuntimeError( QString("Failed to determinate \
PythonExtension object.").toLatin1().constData() ); +        }
+
+        const QVariant variant = qVariantFromValue( extension->object() );
         #ifdef KROSS_PYTHON_VARIANT_DEBUG
-            krosswarning( QString("PythonType<QVariant>::toVariant Failed to \
determinate PythonExtension for object=%1").arg(obj.as_string().c_str()) ); +         \
if(extension->object()) +                krossdebug( \
QString("PythonType<QVariant>::toVariant KrossObject.objectName=%1 \
KrossObject.className=%2 QVariant.toString=%3 \
QVariant.typeName=%4").arg(extension->object()->objectName()).arg(extension->object()->metaObject()->className()).arg(variant.toString()).arg(variant.typeName()) \
); +            else
+                krossdebug( QString("PythonType<QVariant>::toVariant The \
PythonExtension object does not have a valid QObject") );  #endif
-        throw Py::RuntimeError( QString("Failed to determinate PythonExtension \
object.").toLatin1().constData() ); +        return variant;
     }
 
-    const QVariant variant = qVariantFromValue( extension->object() );
-    #ifdef KROSS_PYTHON_VARIANT_DEBUG
-        if(extension->object())
-            krossdebug( QString("PythonType<QVariant>::toVariant \
KrossObject.objectName=%1 KrossObject.className=%2 QVariant.toString=%3 \
QVariant.typeName=%4").arg(extension->object()->objectName()).arg(extension->object()->metaObject()->className()).arg(variant.toString()).arg(variant.typeName()) \
                );
-        else
-            krossdebug( QString("PythonType<QVariant>::toVariant The PythonExtension \
                object does not have a valid QObject") );
-    #endif
-    return variant;
+    throw Py::RuntimeError( QString("Invalid object of type \
'%1'.").arg(type->tp_name).toLatin1().constData() ); +    return QVariant();
 }
 
 MetaType* PythonMetaTypeFactory::create(const char* typeName, const Py::Object& \
object)


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic