From dd2e7b9b4e171577643c9f05d46f6f0770897304 Mon Sep 17 00:00:00 2001 From: JunsuChoi Date: Tue, 19 Mar 2024 10:17:45 +0900 Subject: [PATCH] lottie: Prevent memory leak when file is invalid When json file is invalid in the parser, the LottieComposition object is not released and the parse() returns false. To prevent memory leaks, free the memory before returning false. related issue : https://github.com/thorvg/thorvg/issues/2070 --- src/loaders/lottie/tvgLottieModel.cpp | 4 ++-- src/loaders/lottie/tvgLottieParser.cpp | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/loaders/lottie/tvgLottieModel.cpp b/src/loaders/lottie/tvgLottieModel.cpp index 2ba1499d..473f04dc 100644 --- a/src/loaders/lottie/tvgLottieModel.cpp +++ b/src/loaders/lottie/tvgLottieModel.cpp @@ -207,7 +207,7 @@ float LottieLayer::remap(float frameNo) LottieComposition::~LottieComposition() { - if (!initiated) delete(root->scene); + if (!initiated && root) delete(root->scene); delete(root); free(version); @@ -233,4 +233,4 @@ LottieComposition::~LottieComposition() for (auto s = slots.begin(); s < slots.end(); ++s) { delete(*s); } -} \ No newline at end of file +} diff --git a/src/loaders/lottie/tvgLottieParser.cpp b/src/loaders/lottie/tvgLottieParser.cpp index 11787bbf..7745ac62 100644 --- a/src/loaders/lottie/tvgLottieParser.cpp +++ b/src/loaders/lottie/tvgLottieParser.cpp @@ -1316,7 +1316,10 @@ bool LottieParser::parse() else skip(key); } - if (Invalid() || !comp->root) return false; + if (Invalid() || !comp->root) { + delete(comp); + return false; + } comp->root->inFrame = comp->startFrame; comp->root->outFrame = comp->endFrame; @@ -1324,4 +1327,4 @@ bool LottieParser::parse() postProcess(glyphes); return true; -} \ No newline at end of file +}