Skip to content

Commit

Permalink
Fix memory out-of-bounds issue when multiple PAGView load the same PA…
Browse files Browse the repository at this point in the history
…G file. (#2279)

Co-authored-by: kevingpqi <[email protected]>
  • Loading branch information
kevingpqi123 and kevingpqi committed May 6, 2024
1 parent 251d408 commit 5c2da6a
Showing 1 changed file with 10 additions and 8 deletions.
18 changes: 10 additions & 8 deletions include/pag/file.h
Original file line number Diff line number Diff line change
Expand Up @@ -314,33 +314,35 @@ class AnimatableProperty : public Property<T> {

T getValueAt(Frame frame) override {
T result;
Keyframe<T>* lastKeyframe = keyframes[lastKeyframeIndex];
size_t lastKeyframeIndexInternal = lastKeyframeIndex;
Keyframe<T>* 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) {
result = lastKeyframe->endValue;
} else {
result = lastKeyframe->getValueAt(frame);
}
lastKeyframeIndex = lastKeyframeIndexInternal;
return result;
}

Expand Down

0 comments on commit 5c2da6a

Please sign in to comment.