• Stephan Bergmann's avatar
    rhbz#908674: Adapt rtl::Allocator::construct to C++11 · 635d4390
    Stephan Bergmann yazdı
    ...otherwise, at least with some --with-system-boost versions and C++11
    compilers, like with Fedora's boost-1.50.0-4.fc18.x86_64 and
    gcc-c++-4.7.2-8.fc18.x86_64, using this to copy-construct an instance of
    boost::unordered::detail::ptr_node<std::pair<rtl::OUString,Bootstrap_Impl*>> in
    the call to p_bootstrap_map->insert(...) in rtl_bootstrap_args_open
    (sal/rtl/source/bootstrap.cxx) would memcopy the ptr_node and fail to call
    rtl_uString_acquire, leading to memory corruption later on when
    rtl_uString_release is called one time too often.
    
    It is not entirely clear to me whether this is a shortcoming of the given Boost
    version, but this patch solves the problem and brings rtl::Allocator::construct
    in line with the (changed) Allocator requirements of C++11 anyway.
    
    The problem potentially lurks with every use of rtl::Allocator, but only showed
    now begining with LO 4.0 where e5111574 "Revert
    'sb140: sb140: #i116981# clean up memory upon exit'" re-introduced code into
    rtl_bootstrap_args_open that inserts into a boost::unordered_map that uses
    rtl::Allocator.
    
    (cherry picked from commit c91d3538)
    Conflicts:
    	config_host/config_global.h.in
    ...solved by resorting to the old -DHAVE_CXX11_PERFECT_FORWARDING logic spread
    across various solenv/.../*.mk instead.
    
    Change-Id: I3be22f59a8eb49d31458480c27f3ce15803c7fd4
    Reviewed-on: https://gerrit.libreoffice.org/2166Reviewed-by: 's avatarEike Rathke <erack@redhat.com>
    Tested-by: 's avatarCaolán McNamara <caolanm@redhat.com>
    Reviewed-by: 's avatarCaolán McNamara <caolanm@redhat.com>
    635d4390
Adı
Son kayıt (commit)
Son güncelleme
..
cppunittester Loading commit data...
internal Loading commit data...
osl Loading commit data...
rtl Loading commit data...
sal Loading commit data...
systools/win32 Loading commit data...