Fix Collada: Avoid unnecessary and even wrong check on unavailable data
authorGaia Clary <gaia.clary@machinimatrix.org>
Sun, 11 Mar 2018 19:00:46 +0000 (20:00 +0100)
committerGaia Clary <gaia.clary@machinimatrix.org>
Sun, 11 Mar 2018 19:59:49 +0000 (20:59 +0100)
The function validateConstraints() potentially causes a null pointer
exception. I changed this so that the function returns a failure as soon
as the validation fails. This avoids falling into the null pointer trap.

source/blender/collada/AnimationExporter.cpp

index 97d3b6b..5492fcb 100644 (file)
@@ -1926,15 +1926,21 @@ void AnimationExporter::sample_animation(float *v, std::vector<float> &frames, i
 
 bool AnimationExporter::validateConstraints(bConstraint *con)
 {
-       bool valid = true;
        const bConstraintTypeInfo *cti = BKE_constraint_typeinfo_get(con);
        /* these we can skip completely (invalid constraints...) */
-       if (cti == NULL) valid = false;
-       if (con->flag & (CONSTRAINT_DISABLE | CONSTRAINT_OFF)) valid = false;
+       if (cti == NULL)
+               return false;
+       if (con->flag & (CONSTRAINT_DISABLE | CONSTRAINT_OFF))
+               return false;
+
        /* these constraints can't be evaluated anyway */
-       if (cti->evaluate_constraint == NULL) valid = false;
+       if (cti->evaluate_constraint == NULL)
+               return false;
+
        /* influence == 0 should be ignored */
-       if (con->enforce == 0.0f) valid = false;
+       if (con->enforce == 0.0f)
+               return false;
 
-       return valid;
+       /* validation passed */
+       return true;
 }