From 5c2da6abb3797134a219630dd5aa01406bd5a39f Mon Sep 17 00:00:00 2001 From: kevingpqi123 Date: Mon, 6 May 2024 14:30:47 +0800 Subject: [PATCH] Fix memory out-of-bounds issue when multiple PAGView load the same PAG file. (#2279) Co-authored-by: kevingpqi --- include/pag/file.h | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/include/pag/file.h b/include/pag/file.h index 316fcc2198..15ba51f58b 100644 --- a/include/pag/file.h +++ b/include/pag/file.h @@ -314,26 +314,27 @@ class AnimatableProperty : public Property { T getValueAt(Frame frame) override { T result; - Keyframe* lastKeyframe = keyframes[lastKeyframeIndex]; + size_t lastKeyframeIndexInternal = lastKeyframeIndex; + Keyframe* lastKeyframe = keyframes[lastKeyframeIndexInternal]; if (lastKeyframe->containsTime(frame)) { return lastKeyframe->getValueAt(frame); } if (frame < lastKeyframe->startTime) { - while (lastKeyframeIndex > 0) { - lastKeyframeIndex--; - if (keyframes[lastKeyframeIndex]->containsTime(frame)) { + while (lastKeyframeIndexInternal > 0) { + lastKeyframeIndexInternal--; + if (keyframes[lastKeyframeIndexInternal]->containsTime(frame)) { break; } } } else { - while (lastKeyframeIndex < keyframes.size() - 1) { - lastKeyframeIndex++; - if (keyframes[lastKeyframeIndex]->containsTime(frame)) { + while (lastKeyframeIndexInternal < keyframes.size() - 1) { + lastKeyframeIndexInternal++; + if (keyframes[lastKeyframeIndexInternal]->containsTime(frame)) { break; } } } - lastKeyframe = keyframes[lastKeyframeIndex]; + lastKeyframe = keyframes[lastKeyframeIndexInternal]; if (frame <= lastKeyframe->startTime) { result = lastKeyframe->startValue; } else if (frame >= lastKeyframe->endTime) { @@ -341,6 +342,7 @@ class AnimatableProperty : public Property { } else { result = lastKeyframe->getValueAt(frame); } + lastKeyframeIndex = lastKeyframeIndexInternal; return result; }