Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSybren A. Stüvel <sybren@blender.org>2020-11-10 15:44:47 +0300
committerSybren A. Stüvel <sybren@blender.org>2020-11-10 15:44:47 +0300
commit4960780d76bf5a157404cfa5b126cd8ab87caec8 (patch)
tree0e9c7f2e68baa2af13ca155fbcc27d3a715d6b1f
parent05a2382c08402b250d6b5c4105b449f4474f6cf2 (diff)
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.
-rw-r--r--source/blender/blenkernel/intern/fcurve.c20
1 files changed, 16 insertions, 4 deletions
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;
}
/**