From 6e2275116e2dc0b596eed87f7279d9eded15f075 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 b15c23c7..fcaa7599 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 +}