[Bf-blender-cvs] [4960780d76b] blender-v2.91-release: Animation: More explicit boundary checks when setting active keyframe

Sybren A. Stüvel noreply at git.blender.org
Tue Nov 10 14:00:57 CET 2020


Commit: 4960780d76bf5a157404cfa5b126cd8ab87caec8
Author: Sybren A. Stüvel
Date:   Tue Nov 10 13:44:47 2020 +0100
Branches: blender-v2.91-release
https://developer.blender.org/rB4960780d76bf5a157404cfa5b126cd8ab87caec8

Animation: More explicit boundary checks when setting active keyframe

Fix unit test failing in debug mode by having more explicit boundary checks
when setting an FCurve's active keyframe.

No functional changes.

===================================================================

M	source/blender/blenkernel/intern/fcurve.c

===================================================================

diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c
index dcf4c78dfd8..003e926e0ae 100644
--- a/source/blender/blenkernel/intern/fcurve.c
+++ b/source/blender/blenkernel/intern/fcurve.c
@@ -841,11 +841,23 @@ bool BKE_fcurve_calc_range(
  */
 void BKE_fcurve_active_keyframe_set(FCurve *fcu, const BezTriple *active_bezt)
 {
+  if (active_bezt == NULL) {
+    fcu->active_keyframe_index = FCURVE_ACTIVE_KEYFRAME_NONE;
+    return;
+  }
+
+  /* Gracefully handle out-of-bounds pointers. Ideally this would do a BLI_assert() as well, but
+   * then the unit tests would break in debug mode. */
+  ptrdiff_t offset = active_bezt - fcu->bezt;
+  if (offset < 0 || offset >= fcu->totvert) {
+    fcu->active_keyframe_index = FCURVE_ACTIVE_KEYFRAME_NONE;
+    return;
+  }
+
   /* The active keyframe should always be selected. */
-  BLI_assert((active_bezt == NULL) ||
-             ((active_bezt->f1 | active_bezt->f2 | active_bezt->f3) & SELECT));
-  fcu->active_keyframe_index = (active_bezt == NULL) ? FCURVE_ACTIVE_KEYFRAME_NONE :
-                                                       active_bezt - fcu->bezt;
+  BLI_assert(BEZT_ISSEL_ANY(active_bezt));
+
+  fcu->active_keyframe_index = (int)offset;
 }
 
 /**



More information about the Bf-blender-cvs mailing list