summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Stahl <michael.stahl@allotropia.de>2022-05-22 12:55:36 +0200
committerThorsten Behrens <thorsten.behrens@allotropia.de>2022-06-16 00:09:16 +0200
commitc8088a1691144925ec05f01d6f107afe6ae3a9be (patch)
tree6f91808525e13fe787a20b7f339c15aa7e22e99b
parentnss: upgrade to release 3.79 (diff)
downloadcore-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.cxx2
-rw-r--r--vcl/unx/generic/printer/cupsmgr.cxx2
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 );
}