diff options
author | Michael Stahl <michael.stahl@allotropia.de> | 2022-05-22 12:55:36 +0200 |
---|---|---|
committer | Thorsten Behrens <thorsten.behrens@allotropia.de> | 2022-06-16 00:09:16 +0200 |
commit | c8088a1691144925ec05f01d6f107afe6ae3a9be (patch) | |
tree | 6f91808525e13fe787a20b7f339c15aa7e22e99b | |
parent | nss: upgrade to release 3.79 (diff) | |
download | core-c8088a1691144925ec05f01d6f107afe6ae3a9be.tar.gz core-c8088a1691144925ec05f01d6f107afe6ae3a9be.zip |
vcl: GCC12 says fclose() causes -Werror=use-after-free on any use of FILE*
In file included from vcl/inc/unx/cpdmgr.hxx:34,
from vcl/unx/generic/printer/cpdmgr.cxx:25:
In member function ‘size_t psp::FPtrHash::operator()(const FILE*) const’,
inlined from ‘std::__detail::_Hash_code_base<_Key, _Value, _ExtractKey, _Hash, _RangeHash, _Unused, __cache_hash_code>::__hash_code std::__detail::_Hash_code_base<_Key, _Value, _ExtractKey, _Hash, _RangeHash, _Unused, __cache_hash_code>::_M_hash_code(const _Key&) const [with _Key = _IO_FILE*; _Value = std::pair<_IO_FILE* const, rtl::OString>; _ExtractKey = std::__detail::_Select1st; _Hash = psp::FPtrHash; _RangeHash = std::__detail::_Mod_range_hashing; _Unused = std::__detail::_Default_ranged_hash; bool __cache_hash_code = true]’ at /usr/include/c++/12/bits/hashtable_policy.h:1268:18,
inlined from ‘std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::size_type std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::_M_erase(std::true_type, const key_type&) [with _Key = _IO_FILE*; _Value = std::pair<_IO_FILE* const, rtl::OString>; _Alloc = std::allocator<std::pair<_IO_FILE* const, rtl::OString> >; _ExtractKey = std::__detail::_Select1st; _Equal = std::equal_to<_IO_FILE*>; _Hash = psp::FPtrHash; _RangeHash = std::__detail::_Mod_range_hashing; _Unused = std::__detail::_Default_ranged_hash; _RehashPolicy = std::__detail::_Prime_rehash_policy; _Traits = std::__detail::_Hashtable_traits<true, false, true>]’ at /usr/include/c++/12/bits/hashtable.h:2358:43,
inlined from ‘std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::size_type std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::erase(const key_type&) [with _Key = _IO_FILE*; _Value = std::pair<_IO_FILE* const, rtl::OString>; _Alloc = std::allocator<std::pair<_IO_FILE* const, rtl::OString> >; _ExtractKey = std::__detail::_Select1st; _Equal = std::equal_to<_IO_FILE*>; _Hash = psp::FPtrHash; _RangeHash = std::__detail::_Mod_range_hashing; _Unused = std::__detail::_Default_ranged_hash; _RehashPolicy = std::__detail::_Prime_rehash_policy; _Traits = std::__detail::_Hashtable_traits<true, false, true>]’ at /usr/include/c++/12/bits/hashtable.h:971:24,
inlined from ‘std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::size_type std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::erase(const key_type&) [with _Key = _IO_FILE*; _Tp = rtl::OString; _Hash = psp::FPtrHash; _Pred = std::equal_to<_IO_FILE*>; _Alloc = std::allocator<std::pair<_IO_FILE* const, rtl::OString> >]’ at /usr/include/c++/12/bits/unordered_map.h:763:26,
inlined from ‘virtual bool psp::CPDManager::endSpool(const rtl::OUString&, const rtl::OUString&, FILE*, const psp::JobData&, bool, const rtl::OUString&)’ at vcl/unx/generic/printer/cpdmgr.cxx:725:28:
vcl/inc/unx/cupsmgr.hxx:35:43: error: pointer may be used after ‘int fclose(FILE*)’ [-Werror=use-after-free]
35 | { return reinterpret_cast<size_t>(pPtr); }
| ^
vcl/unx/generic/printer/cpdmgr.cxx: In member function ‘virtual bool psp::CPDManager::endSpool(const rtl::OUString&, const rtl::OUString&, FILE*, const psp::JobData&, bool, const rtl::OUString&)’:
vcl/unx/generic/printer/cpdmgr.cxx:695:15: note: call to ‘int fclose(FILE*)’ here
695 | fclose( pFile );
| ~~~~~~^~~~~~~~~
Change-Id: Ib035f2287649dcf9a2d37bda85ebcf52c6c51aaa
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134739
Tested-by: Jenkins
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
(cherry picked from commit 02ebfb8ed6175934a1985786e6816ecef1bd59f8)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134632
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit aedb674394960a294535f35d19f7ae532ee5d35a)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135488
Tested-by: Michael Stahl <michael.stahl@allotropia.de>
-rw-r--r-- | vcl/unx/generic/printer/cpdmgr.cxx | 2 | ||||
-rw-r--r-- | vcl/unx/generic/printer/cupsmgr.cxx | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/vcl/unx/generic/printer/cpdmgr.cxx b/vcl/unx/generic/printer/cpdmgr.cxx index d114dd71accd..a4c55b83365d 100644 --- a/vcl/unx/generic/printer/cpdmgr.cxx +++ b/vcl/unx/generic/printer/cpdmgr.cxx @@ -717,7 +717,7 @@ bool CPDManager::endSpool( const OUString& rPrintername, const OUString& rJobTit } g_variant_unref(ret); unlink( it->second.getStr() ); - m_aSpoolFiles.erase( pFile ); + m_aSpoolFiles.erase(it); } #else (void)rPrintername; diff --git a/vcl/unx/generic/printer/cupsmgr.cxx b/vcl/unx/generic/printer/cupsmgr.cxx index 12482b2ba878..0849d5e84763 100644 --- a/vcl/unx/generic/printer/cupsmgr.cxx +++ b/vcl/unx/generic/printer/cupsmgr.cxx @@ -872,7 +872,7 @@ bool CUPSManager::endSpool( const OUString& rPrintername, const OUString& rJobTi #endif unlink( it->second.getStr() ); - m_aSpoolFiles.erase( pFile ); + m_aSpoolFiles.erase(it); if( pOptions ) cupsFreeOptions( nNumOptions, pOptions ); } |