From 4836d3157f53d28d46504baf5d6a0e31dee79b58 Mon Sep 17 00:00:00 2001 From: "Eunki, Hong" Date: Thu, 22 Dec 2022 12:28:50 +0900 Subject: [PATCH] Fix coverity issue - sizeof(int) != sizeof(float) case in json parsing - mCompletedTaskIds iterator usage issue Change-Id: I473ed3c61e3218a98aae61b9a8ca0df15f10c32c Signed-off-by: Eunki, Hong --- dali-toolkit/internal/builder/builder-get-is.inl.h | 42 +++++++++++++++++----- .../image-loader/async-image-loader-impl.cpp | 13 ++++--- 2 files changed, 42 insertions(+), 13 deletions(-) diff --git a/dali-toolkit/internal/builder/builder-get-is.inl.h b/dali-toolkit/internal/builder/builder-get-is.inl.h index 0a7f6d5..3074a57 100644 --- a/dali-toolkit/internal/builder/builder-get-is.inl.h +++ b/dali-toolkit/internal/builder/builder-get-is.inl.h @@ -2,7 +2,7 @@ #define DALI_TOOLKIT_INTERNAL_BUILDER_GET_IS_INL /* - * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 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. @@ -159,6 +159,30 @@ inline bool CopyNumbers(TreeNode::ConstIterator iter, int N, T& vector) return true; } +// copy N Numbers +template +inline bool CopyNumbers(TreeNode::ConstIterator iter, T (&vector)[N]) +{ + for(int i = 0; i < N; ++i) + { + if((*iter).second.GetType() == TreeNode::FLOAT) + { + vector[i] = (*iter).second.GetFloat(); + } + else if((*iter).second.GetType() == TreeNode::INTEGER) + { + vector[i] = static_cast((*iter).second.GetInteger()); + } + else + { + return false; + } + iter++; + } + + return true; +} + inline OptionalVector4 IsVector4(const OptionalChild& node) { OptionalVector4 ret; @@ -214,7 +238,7 @@ inline OptionalMatrix IsMatrix(const OptionalChild& node) if(node && (TreeNode::ARRAY == (*node).GetType()) && (*node).Size() >= 16) { float v[16]; - if(CopyNumbers((*node).CBegin(), 16, v)) + if(CopyNumbers((*node).CBegin(), v)) { ret = OptionalMatrix(Dali::Matrix(v)); } @@ -230,7 +254,7 @@ inline OptionalMatrix3 IsMatrix3(const OptionalChild& node) if(node && (TreeNode::ARRAY == (*node).GetType()) && (*node).Size() >= 9) { float v[9]; - if(CopyNumbers((*node).CBegin(), 9, v)) + if(CopyNumbers((*node).CBegin(), v)) { ret = OptionalMatrix3(Dali::Matrix3(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8])); } @@ -247,10 +271,10 @@ inline OptionalRect IsRect(const OptionalChild& node) if((*node).Size() >= 4) { TreeNode::ConstIterator iter((*node).CBegin()); - int v[4]; - if(CopyNumbers((*node).CBegin(), 4, v)) + float v[4]; + if(CopyNumbers((*node).CBegin(), v)) { - ret = OptionalRect(Dali::Rect(v[0], v[1], v[2], v[3])); + ret = OptionalRect(Dali::Rect(static_cast(v[0]), static_cast(v[1]), static_cast(v[2]), static_cast(v[3]))); } } } @@ -265,10 +289,10 @@ inline OptionalExtents IsExtents(const OptionalChild& node) if((*node).Size() >= 4) { TreeNode::ConstIterator iter((*node).CBegin()); - int v[4]; - if(CopyNumbers((*node).CBegin(), 4, v)) + float v[4]; + if(CopyNumbers((*node).CBegin(), v)) { - extents = OptionalExtents(Dali::Extents(v[0], v[1], v[2], v[3])); + extents = OptionalExtents(Dali::Extents(static_cast(v[0]), static_cast(v[1]), static_cast(v[2]), static_cast(v[3]))); } } } diff --git a/dali-toolkit/internal/image-loader/async-image-loader-impl.cpp b/dali-toolkit/internal/image-loader/async-image-loader-impl.cpp index 0a0338f..11801fc 100644 --- a/dali-toolkit/internal/image-loader/async-image-loader-impl.cpp +++ b/dali-toolkit/internal/image-loader/async-image-loader-impl.cpp @@ -174,17 +174,22 @@ void AsyncImageLoader::RemoveCompletedTask() std::uint32_t loadingTaskId; auto end = mLoadingTasks.end(); auto endCompletedIter = mCompletedTaskIds.end(); - for(std::vector::iterator iter = mLoadingTasks.begin(); iter != end; ++iter) + for(auto iterCompleted = mCompletedTaskIds.begin(); iterCompleted != endCompletedIter; ++iterCompleted) { - loadingTaskId = (*iter).loadId; - for(auto iterCompleted = mCompletedTaskIds.begin(); iterCompleted != endCompletedIter; ++iterCompleted) + loadingTaskId = (*iterCompleted); + for(std::vector::iterator iter = mLoadingTasks.begin(); iter != end; ++iter) { - if((*iterCompleted) == loadingTaskId) + if((*iter).loadId == loadingTaskId) { mLoadingTasks.erase(iter); + end = mLoadingTasks.end(); + break; } } } + + // Remove cached completed tasks + mCompletedTaskIds.clear(); } } // namespace Internal -- 2.7.4