From: Eunki, Hong Date: Tue, 14 Nov 2023 01:46:51 +0000 (+0900) Subject: Fix coverity issue (invalid iterator access) X-Git-Tag: dali_2.2.53~7 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=6a5b3abad8f924a0266b2dce03816b66c38d0cd2 Fix coverity issue (invalid iterator access) We can setup ImageType freely. If some user set invalid image type into EncodedImageBuffer, it will be crash. To avoid this situation, let we allow to set invalid image type, and it will works like regular image type. Change-Id: I84757da0540755f12eb9a12850941ba6bd93bac1 Signed-off-by: Eunki, Hong --- diff --git a/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp b/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp index 52d5495..2510393 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp @@ -959,6 +959,46 @@ int UtcDaliImageViewEncodedBufferWithAnimatedVectorImage(void) END_TEST; } +int UtcDaliImageViewEncodedBufferWithInvalidImageType(void) +{ + ToolkitTestApplication application; + TestGlAbstraction& gl = application.GetGlAbstraction(); + const std::vector& textures = gl.GetBoundTextures(); + size_t numTextures = textures.size(); + + // Get encoded raw-buffer jpg image with invalid image type, and generate url + EncodedImageBuffer buffer = ConvertFileToEncodedImageBuffer(gImage_34_RGBA, static_cast(-1)); + ImageUrl url = Toolkit::Image::GenerateUrl(buffer); + + // Async loading, no atlasing for big size image + ImageView imageView = ImageView::New(url.GetUrl()); + + // By default, Aysnc loading is used + application.GetScene().Add(imageView); + imageView.SetProperty(Actor::Property::SIZE, Vector2(100, 100)); + imageView.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); + + application.SendNotification(); + application.Render(16); + + // Load image + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); + + application.SendNotification(); + application.Render(16); + application.SendNotification(); + + const std::vector& textures2 = gl.GetBoundTextures(); + DALI_TEST_GREATER(textures2.size(), numTextures, TEST_LOCATION); + + // Remove visual, for line coverage. + imageView.Unparent(); + application.SendNotification(); + application.Render(16); + + END_TEST; +} + int UtcDaliImageViewAddedTexture(void) { ToolkitTestApplication application; diff --git a/dali-toolkit/internal/texture-manager/texture-cache-manager.cpp b/dali-toolkit/internal/texture-manager/texture-cache-manager.cpp index 095f21f..2dfd16f 100644 --- a/dali-toolkit/internal/texture-manager/texture-cache-manager.cpp +++ b/dali-toolkit/internal/texture-manager/texture-cache-manager.cpp @@ -36,18 +36,22 @@ namespace { const std::string_view& GetEncodedImageBufferExtensions(Dali::EncodedImageBuffer::ImageType imageType) { + static constexpr std::string_view emptyString = ""; static const std::unordered_map gEncodedImageBufferExtensionMap = { - {Dali::EncodedImageBuffer::ImageType::REGULAR_IMAGE, ""}, + {Dali::EncodedImageBuffer::ImageType::REGULAR_IMAGE, emptyString}, {Dali::EncodedImageBuffer::ImageType::VECTOR_IMAGE, ".svg"}, {Dali::EncodedImageBuffer::ImageType::ANIMATED_VECTOR_IMAGE, ".json"}, }; const auto iter = gEncodedImageBufferExtensionMap.find(imageType); - DALI_ASSERT_DEBUG(iter != gEncodedImageBufferExtensionMap.end()); + if(DALI_LIKELY(iter != gEncodedImageBufferExtensionMap.end())) + { + return iter->second; + } - return iter->second; + return emptyString; } } // namespace #ifdef DEBUG_ENABLED