Kaydet (Commit) 6776cb6f authored tarafından Catalin Iacob's avatar Catalin Iacob Kaydeden (comit) Stephan Bergmann

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@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.
üst 54724983
......@@ -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
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment