Revision: 43626
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43626
Author:   moguri
Date:     2012-01-22 23:15:35 +0000 (Sun, 22 Jan 2012)
Log Message:
-----------
Fix for "[#29911] Crash on reading BL_ActionActuator.channelNames"

The crash occurred when an action actuator was attached to a non-armature 
object because objects that aren't armatures do not have pose data. A 
NotImplementedError is now raised if someone tries to access any of the 
following with an action actuator attached to a non-armature object:

BL_ActionActuator.channelNames
BL_ActionActuator.getChannel()
BL_ActionActuator.setChannel()

Modified Paths:
--------------
    trunk/blender/source/gameengine/Converter/BL_ActionActuator.cpp

Modified: trunk/blender/source/gameengine/Converter/BL_ActionActuator.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_ActionActuator.cpp     
2012-01-22 23:13:24 UTC (rev 43625)
+++ trunk/blender/source/gameengine/Converter/BL_ActionActuator.cpp     
2012-01-22 23:15:35 UTC (rev 43626)
@@ -350,6 +350,12 @@
 PyObject* BL_ActionActuator::PyGetChannel(PyObject* value)
 {
        const char *string= _PyUnicode_AsString(value);
+
+       if (GetParent()->GetGameObjectType() != SCA_IObject::OBJ_ARMATURE)
+       {
+               PyErr_SetString(PyExc_NotImplementedError, 
"actuator.getChannel(): Only armatures support channels");
+               return NULL;
+       }
        
        if (!string) {
                PyErr_SetString(PyExc_TypeError, "expected a single string");
@@ -414,6 +420,12 @@
        PyObject *pymat= NULL;
        PyObject *pyloc= NULL, *pysize= NULL, *pyquat= NULL;
        bPoseChannel *pchan;
+
+       if (GetParent()->GetGameObjectType() != SCA_IObject::OBJ_ARMATURE)
+       {
+               PyErr_SetString(PyExc_NotImplementedError, 
"actuator.setChannel(): Only armatures support channels");
+               return NULL;
+       }
        
        if(PyTuple_Size(args)==2) {
                if (!PyArg_ParseTuple(args,"sO:setChannel", &string, &pymat)) 
// matrix
@@ -574,6 +586,12 @@
        PyObject *ret= PyList_New(0);
        PyObject *item;
        
+       if (self->GetParent()->GetGameObjectType() != SCA_IObject::OBJ_ARMATURE)
+       {
+               PyErr_SetString(PyExc_NotImplementedError, 
"actuator.channelNames: Only armatures support channels");
+               return NULL;
+       }
+
        bPose *pose= ((BL_ArmatureObject*)self->GetParent())->GetOrigPose();
        
        if(pose) {

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to