vcl/unx/generic/printer/cpdmgr.cxx  |    2 +-
 vcl/unx/generic/printer/cupsmgr.cxx |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

New commits:
commit c8088a1691144925ec05f01d6f107afe6ae3a9be
Author:     Michael Stahl <michael.st...@allotropia.de>
AuthorDate: Sun May 22 12:55:36 2022 +0200
Commit:     Thorsten Behrens <thorsten.behr...@allotropia.de>
CommitDate: Thu Jun 16 00:09:16 2022 +0200

    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.st...@allotropia.de>
    (cherry picked from commit 02ebfb8ed6175934a1985786e6816ecef1bd59f8)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134632
    Reviewed-by: Caolán McNamara <caol...@redhat.com>
    (cherry picked from commit aedb674394960a294535f35d19f7ae532ee5d35a)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135488
    Tested-by: Michael Stahl <michael.st...@allotropia.de>

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 );
     }

Reply via email to