vcl/source/image/ImplImageTree.cxx |   22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

New commits:
commit 4ebfd85322beffed953db01121a45c4a8a12cd59
Author:     Stephan Bergmann <sberg...@redhat.com>
AuthorDate: Mon May 16 10:41:36 2022 +0200
Commit:     Stephan Bergmann <sberg...@redhat.com>
CommitDate: Mon May 16 16:11:45 2022 +0200

    Revert "use more string_view in getNameNoExtension"
    
    This reverts commit d4f2b8eb74f430f5fc3622d668b33df1f99a0c1d, as it causes
    heap-use-after-free, e.g. during CppunitTest_dbaccess_hsqldb_test,
    
    > ==24944==ERROR: AddressSanitizer: heap-use-after-free on address 
0x6070001a04a8 at pc 0x0000004b6b42 bp 0x7fff0f651490 sp 0x7fff0f650c40
    > READ of size 56 at 0x6070001a04a8 thread T0
    >     #0 0x4b6b41 in __asan_memcpy 
/home/tdf/lode/packages/llvm-llvmorg-12.0.1.src/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp:22
    >     #1 0x7f315931e373 in rtl::addDataHelper(char16_t*, char16_t const*, 
unsigned long) /include/rtl/stringconcat.hxx:89:9
    >     #2 0x7f3159beb290 in 
rtl::ToStringHelper<std::basic_string_view<char16_t, std::char_traits<char16_t> 
> >::addData(char16_t*, std::basic_string_view<char16_t, 
std::char_traits<char16_t> >) /include/rtl/stringconcat.hxx:553:14
    >     #3 0x7f3159beb7ea in rtl::OUStringConcat<rtl::OUStringConcatMarker, 
std::basic_string_view<char16_t, std::char_traits<char16_t> > 
>::addData(char16_t*) const /include/rtl/stringconcat.hxx:252:88
    >     #4 0x7f3159beb59d in 
rtl::ToStringHelper<rtl::OUStringConcat<rtl::OUStringConcatMarker, 
std::basic_string_view<char16_t, std::char_traits<char16_t> > > 
>::addData(char16_t*, rtl::OUStringConcat<rtl::OUStringConcatMarker, 
std::basic_string_view<char16_t, std::char_traits<char16_t> > > const&) 
/include/rtl/stringconcat.hxx:271:122
    >     #5 0x7f315c3dc450 in 
rtl::OUStringConcat<rtl::OUStringConcat<rtl::OUStringConcatMarker, 
std::basic_string_view<char16_t, std::char_traits<char16_t> > >, char const 
[5]>::addData(char16_t*) const /include/rtl/stringconcat.hxx:252:119
    >     #6 0x7f315c3c41b2 in 
rtl::OUString::OUString<rtl::OUStringConcat<rtl::OUStringConcatMarker, 
std::basic_string_view<char16_t, std::char_traits<char16_t> > >, char const 
[5]>(rtl::OUStringConcat<rtl::OUStringConcat<rtl::OUStringConcatMarker, 
std::basic_string_view<char16_t, std::char_traits<char16_t> > >, char const 
[5]>&&) /include/rtl/ustring.hxx:495:34
    >     #7 0x7f315c3eb066 in void 
__gnu_cxx::new_allocator<rtl::OUString>::construct<rtl::OUString, 
rtl::OUStringConcat<rtl::OUStringConcat<rtl::OUStringConcatMarker, 
std::basic_string_view<char16_t, std::char_traits<char16_t> > >, char const 
[5]> >(rtl::OUString*, 
rtl::OUStringConcat<rtl::OUStringConcat<rtl::OUStringConcatMarker, 
std::basic_string_view<char16_t, std::char_traits<char16_t> > >, char const 
[5]>&&) 
/opt/rh/devtoolset-7/root/usr/lib/gcc/x86_64-redhat-linux/7/../../../../include/c++/7/ext/new_allocator.h:136:23
    >     #8 0x7f315c3e9e46 in void 
std::allocator_traits<std::allocator<rtl::OUString> >::construct<rtl::OUString, 
rtl::OUStringConcat<rtl::OUStringConcat<rtl::OUStringConcatMarker, 
std::basic_string_view<char16_t, std::char_traits<char16_t> > >, char const 
[5]> >(std::allocator<rtl::OUString>&, rtl::OUString*, 
rtl::OUStringConcat<rtl::OUStringConcat<rtl::OUStringConcatMarker, 
std::basic_string_view<char16_t, std::char_traits<char16_t> > >, char const 
[5]>&&) 
/opt/rh/devtoolset-7/root/usr/lib/gcc/x86_64-redhat-linux/7/../../../../include/c++/7/bits/alloc_traits.h:475:8
    >     #9 0x7f315c3ea266 in void std::__cxx1998::vector<rtl::OUString, 
std::allocator<rtl::OUString> 
>::_M_realloc_insert<rtl::OUStringConcat<rtl::OUStringConcat<rtl::OUStringConcatMarker,
 std::basic_string_view<char16_t, std::char_traits<char16_t> > >, char const 
[5]> >(__gnu_cxx::__normal_iterator<rtl::OUString*, 
std::__cxx1998::vector<rtl::OUString, std::allocator<rtl::OUString> > >, 
rtl::OUStringConcat<rtl::OUStringConcat<rtl::OUStringConcatMarker, 
std::basic_string_view<char16_t, std::char_traits<char16_t> > >, char const 
[5]>&&) 
/opt/rh/devtoolset-7/root/usr/lib/gcc/x86_64-redhat-linux/7/../../../../include/c++/7/bits/vector.tcc:415:4
    >     #10 0x7f315c3e9c59 in rtl::OUString& 
std::__cxx1998::vector<rtl::OUString, std::allocator<rtl::OUString> 
>::emplace_back<rtl::OUStringConcat<rtl::OUStringConcat<rtl::OUStringConcatMarker,
 std::basic_string_view<char16_t, std::char_traits<char16_t> > >, char const 
[5]> >(rtl::OUStringConcat<rtl::OUStringConcat<rtl::OUStringConcatMarker, 
std::basic_string_view<char16_t, std::char_traits<char16_t> > >, char const 
[5]>&&) 
/opt/rh/devtoolset-7/root/usr/lib/gcc/x86_64-redhat-linux/7/../../../../include/c++/7/bits/vector.tcc:105:4
    >     #11 0x7f315c3bc742 in rtl::OUString& 
std::__debug::vector<rtl::OUString, std::allocator<rtl::OUString> 
>::emplace_back<rtl::OUStringConcat<rtl::OUStringConcat<rtl::OUStringConcatMarker,
 std::basic_string_view<char16_t, std::char_traits<char16_t> > >, char const 
[5]> >(rtl::OUStringConcat<rtl::OUStringConcat<rtl::OUStringConcatMarker, 
std::basic_string_view<char16_t, std::char_traits<char16_t> > >, char const 
[5]>&&) 
/opt/rh/devtoolset-7/root/usr/lib/gcc/x86_64-redhat-linux/7/../../../../include/c++/7/debug/vector:489:11
    >     #12 0x7f315c3a7729 in ImplImageTree::getPaths(rtl::OUString const&, 
LanguageTag const&) /vcl/source/image/ImplImageTree.cxx:226:20
    [...]
    
    (<https://ci.libreoffice.org//job/lo_ubsan/2399/>)
    
    Change-Id: I3af57646bc97c33aad4570a4d6b68dff340b4c64
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134390
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <sberg...@redhat.com>

diff --git a/vcl/source/image/ImplImageTree.cxx 
b/vcl/source/image/ImplImageTree.cxx
index ae9baacd55ca..5f2d1e94af6a 100644
--- a/vcl/source/image/ImplImageTree.cxx
+++ b/vcl/source/image/ImplImageTree.cxx
@@ -134,10 +134,10 @@ bool urlExists(OUString const & sUrl)
     return osl::FileBase::E_None == eRC;
 }
 
-std::u16string_view getNameNoExtension(std::u16string_view sName)
+OUString getNameNoExtension(std::u16string_view sName)
 {
     size_t nDotPosition = sName.rfind('.');
-    return sName.substr(0, nDotPosition);
+    return OUString(sName.substr(0, nDotPosition));
 }
 
 std::shared_ptr<SvMemoryStream> wrapStream(uno::Reference<io::XInputStream> 
const & rInputStream)
@@ -222,15 +222,15 @@ std::vector<OUString> ImplImageTree::getPaths(OUString 
const & name, LanguageTag
     {
         for (const OUString& rFallback : rLanguageTag.getFallbackStrings(true))
         {
-            std::u16string_view aFallbackName = 
getNameNoExtension(getRealImageName(createPath(name, pos, rFallback)));
-            sPaths.emplace_back(OUString::Concat(aFallbackName) + ".png");
-            sPaths.emplace_back(OUString::Concat(aFallbackName) + ".svg");
+            OUString aFallbackName = 
getNameNoExtension(getRealImageName(createPath(name, pos, rFallback)));
+            sPaths.emplace_back(aFallbackName + ".png");
+            sPaths.emplace_back(aFallbackName + ".svg");
         }
     }
 
-    std::u16string_view aRealName = getNameNoExtension(getRealImageName(name));
-    sPaths.emplace_back(OUString::Concat(aRealName) + ".png");
-    sPaths.emplace_back(OUString::Concat(aRealName) + ".svg");
+    OUString aRealName = getNameNoExtension(getRealImageName(name));
+    sPaths.emplace_back(aRealName + ".png");
+    sPaths.emplace_back(aRealName + ".svg");
 
     return sPaths;
 }
@@ -624,15 +624,15 @@ OUString const & ImplImageTree::getRealImageName(OUString 
const & rIconName)
 {
     IconLinkHash & rLinkHash = maIconSets[maCurrentStyle].maLinkHash;
 
-    std::u16string_view sNameWithNoExtension = getNameNoExtension(rIconName);
+    OUString sNameWithNoExtension = getNameNoExtension(rIconName);
 
     // PNG is priority
-    auto it = rLinkHash.find(OUString::Concat(sNameWithNoExtension) + ".png");
+    auto it = rLinkHash.find(sNameWithNoExtension + ".png");
     if (it != rLinkHash.end())
         return it->second;
 
     // also check SVG name
-    it = rLinkHash.find(OUString::Concat(sNameWithNoExtension) + ".svg");
+    it = rLinkHash.find(sNameWithNoExtension + ".svg");
     if (it != rLinkHash.end())
         return it->second;
 

Reply via email to