From c6e69ddd57f7ed8a1a364781a0378b65a3c57e7b Mon Sep 17 00:00:00 2001 From: "Eunki, Hong" Date: Wed, 11 Oct 2023 13:32:03 +0900 Subject: [PATCH] [Tizen] Make IsLoaded return false when SVG parse failed Since we keep mPicture / mParsedImage when we fail to parse, we can call Rasterize for those images. In this case, some invalid behavior might be happened! Change-Id: Ib48497b49ae70a4746ce208348c1b362c1270a34 Signed-off-by: Eunki, Hong --- .../common/vector-image-renderer-impl.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/dali/internal/vector-image/common/vector-image-renderer-impl.cpp b/dali/internal/vector-image/common/vector-image-renderer-impl.cpp index 88414b7..fd96e1f 100644 --- a/dali/internal/vector-image/common/vector-image-renderer-impl.cpp +++ b/dali/internal/vector-image/common/vector-image-renderer-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Samsung Electronics Co., Ltd. + * Copyright (c) 2023 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -86,6 +86,7 @@ VectorImageRenderer::~VectorImageRenderer() if(mPicture) { delete(mPicture); + mPicture = nullptr; } tvg::Initializer::term(tvg::CanvasEngine::Sw); @@ -93,11 +94,13 @@ VectorImageRenderer::~VectorImageRenderer() if(mParsedImage) { nsvgDelete(mParsedImage); + mParsedImage = nullptr; } if(mRasterizer) { nsvgDeleteRasterizer(mRasterizer); + mRasterizer = nullptr; } #endif } @@ -118,6 +121,7 @@ void VectorImageRenderer::Initialize() bool VectorImageRenderer::Load(const Vector& data, float dpi) { Mutex::ScopedLock lock(mMutex); + #ifdef THORVG_SUPPORT if(!mSwCanvas) { @@ -166,6 +170,14 @@ bool VectorImageRenderer::Load(const Vector& data, float dpi) break; } } + + // Destroy mPicture and make it as nullptr, so we can notify that we fail to load svg file. + if(mParsedImage) + { + delete(mPicture); + mPicture = nullptr; + } + return false; } @@ -185,6 +197,14 @@ bool VectorImageRenderer::Load(const Vector& data, float dpi) if(!mParsedImage || !mParsedImage->shapes) { DALI_LOG_ERROR("VectorImageRenderer::Load: nsvgParse failed\n"); + + // Destroy mParsedImage and make it as nullptr, so we can notify that we fail to load svg file. + if(mParsedImage) + { + nsvgDelete(mParsedImage); + mParsedImage = nullptr; + } + return false; } -- 2.7.4