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 /source/blender/blenkernel/intern/fcurve.c
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.
Diffstat (limited to 'source/blender/blenkernel/intern/fcurve.c')
-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;
}
/**