[Libreoffice-commits] .: store/source

Stephan Bergmann sbergmann at kemper.freedesktop.org
Fri Mar 23 01:00:24 PDT 2012


 store/source/lockbyte.cxx |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

New commits:
commit 6776cb6f9cb91c3f86c4e66695eb7e9f4ffef715
Author: Catalin Iacob <iacobcatalin at gmail.com>
Date:   Wed Mar 14 23:35:49 2012 +0100

    Initialize m_hFile in FileMapping constructor.
    
    GCC gives the following warning which breaks compilation when using --enable-werror:
    lockbyte.cxx: In function 'storeError store::FileLockBytes_createInstance(rtl::Reference<store::ILockBytes>&, rtl_uString*, storeAccessMode)':
    lockbyte.css:512:37: error: 'prephitmp.221' may be used uninitialized in this function [-Werror=uninitialized]
    lockbyte.cxx:906:1: note: 'prephitmp.221' was declared here
    
    It's not clear from GCC's message, but what it warns about is
    FileMapping::m_hFile. This is because of the following sequence:
    * xMapping.release() makes xMapping.m_value be a default constructed
      FileMapping
    * the xMapping local variable in store::FileLockBytes_createInstance
      gets destructed
    * ~ResourceHolder() calls ResourceHolder::reset
    * ResourceHolder::reset() calls FileMapping::UnmapFile::operator()
      passing m_value as rMapping
    * FileMapping::UnmapFile::operator() uses rMapping.m_hFile but
      rMapping is a default constructed FileMapping and therefore has
      m_hFile uninitialized
    
    Signed-off-by: Stephan Bergmann <sbergman at redhat.com>:
    To me, this looks more like a compiler error.  Also note that
    ResourceHolder::reset only calls FileMapping::UnmapFile::operator() if tmp !=
    value, which is not the case here, as both tmp and value are default-
    constructed.  And FileMapping::operator!= is carefule not to use the potentially
    uninitialized m_hFile.  But always intiializing m_hFile is probably not a bad
    idea, anyway.  And if it helps a certain compiler, all the better.

diff --git a/store/source/lockbyte.cxx b/store/source/lockbyte.cxx
index e28bffe..1a8bf81 100644
--- a/store/source/lockbyte.cxx
+++ b/store/source/lockbyte.cxx
@@ -478,7 +478,7 @@ struct FileMapping
     sal_uInt32  m_nSize;
     oslFileHandle m_hFile;
 
-    FileMapping() : m_pAddr(0), m_nSize(0) {}
+    FileMapping() : m_pAddr(0), m_nSize(0), m_hFile() {}
 
     bool operator != (FileMapping const & rhs) const
     {


More information about the Libreoffice-commits mailing list