From 374a12528056db0d5d4a0fb41502cd4bb13c4dfa Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Fri, 11 Aug 2023 12:19:11 +0900 Subject: [PATCH] loader/lottie: enhance stability Addressed corner cases to prevent memory violations. --- src/loaders/lottie/tvgLottieBuilder.cpp | 9 ++++++--- src/loaders/lottie/tvgLottieLoader.cpp | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/loaders/lottie/tvgLottieBuilder.cpp b/src/loaders/lottie/tvgLottieBuilder.cpp index 8cf5cf62..22d9bedb 100644 --- a/src/loaders/lottie/tvgLottieBuilder.cpp +++ b/src/loaders/lottie/tvgLottieBuilder.cpp @@ -240,8 +240,11 @@ static void _updateImage(LottieGroup* parent, LottieImage* image, int32_t frameN { auto picture = Picture::gen(); - if (image->size > 0) picture->load((const char*)image->b64Data, image->size, image->mimeType, false); - else picture->load(image->path); + if (image->size > 0) { + if (picture->load((const char*)image->b64Data, image->size, image->mimeType, false) != Result::Success) return; + } else { + if (picture->load(image->path) != Result::Success) return; + } if (baseShape) { picture->transform(baseShape->transform()); @@ -444,7 +447,7 @@ bool LottieBuilder::update(LottieComposition* comp, int32_t frameNo) void LottieBuilder::build(LottieComposition* comp) { - if (comp->scene) return; + if (!comp || comp->scene) return; comp->scene = Scene::gen().release(); if (!comp->scene) return; diff --git a/src/loaders/lottie/tvgLottieLoader.cpp b/src/loaders/lottie/tvgLottieLoader.cpp index a689f9fb..af9c3531 100644 --- a/src/loaders/lottie/tvgLottieLoader.cpp +++ b/src/loaders/lottie/tvgLottieLoader.cpp @@ -265,7 +265,7 @@ bool LottieLoader::close() unique_ptr LottieLoader::paint() { this->done(); - + if (!comp) return nullptr; return cast(comp->scene); }