From 4d35172f52a324c669dc4b464eb7fb02a19560b0 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 8 Dec 2012 00:37:28 +0000 Subject: [PATCH 1/1] Don't use values returned by lstat() if it failed in wxFileCtrl code. The buffer may be uninitialized or at least not contain the correct data if lstat() failed, don't use it in this case. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73144 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/generic/filectrlg.cpp | 41 +++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/src/generic/filectrlg.cpp b/src/generic/filectrlg.cpp index 87c3fc7866..ffe936ea96 100644 --- a/src/generic/filectrlg.cpp +++ b/src/generic/filectrlg.cpp @@ -223,32 +223,39 @@ void wxFileData::ReadData() wxStructStat buff; #if defined(__UNIX__) && (!defined( __OS2__ ) && !defined(__VMS)) - lstat( m_filePath.fn_str(), &buff ); - m_type |= S_ISLNK(buff.st_mode) ? is_link : 0; + const bool hasStat = lstat( m_filePath.fn_str(), &buff ) == 0; + if ( hasStat ) + m_type |= S_ISLNK(buff.st_mode) ? is_link : 0; #else // no lstat() - wxStat( m_filePath, &buff ); + const bool hasStat = wxStat( m_filePath, &buff ) == 0; #endif - m_type |= (buff.st_mode & S_IFDIR) != 0 ? is_dir : 0; - m_type |= (buff.st_mode & wxS_IXUSR) != 0 ? is_exe : 0; + if ( hasStat ) + { + m_type |= (buff.st_mode & S_IFDIR) != 0 ? is_dir : 0; + m_type |= (buff.st_mode & wxS_IXUSR) != 0 ? is_exe : 0; - m_size = buff.st_size; + m_size = buff.st_size; - m_dateTime = buff.st_mtime; + m_dateTime = buff.st_mtime; + } #endif // __WXWINCE__ #if defined(__UNIX__) - m_permissions.Printf(wxT("%c%c%c%c%c%c%c%c%c"), - buff.st_mode & wxS_IRUSR ? wxT('r') : wxT('-'), - buff.st_mode & wxS_IWUSR ? wxT('w') : wxT('-'), - buff.st_mode & wxS_IXUSR ? wxT('x') : wxT('-'), - buff.st_mode & wxS_IRGRP ? wxT('r') : wxT('-'), - buff.st_mode & wxS_IWGRP ? wxT('w') : wxT('-'), - buff.st_mode & wxS_IXGRP ? wxT('x') : wxT('-'), - buff.st_mode & wxS_IROTH ? wxT('r') : wxT('-'), - buff.st_mode & wxS_IWOTH ? wxT('w') : wxT('-'), - buff.st_mode & wxS_IXOTH ? wxT('x') : wxT('-')); + if ( hasStat ) + { + m_permissions.Printf(wxT("%c%c%c%c%c%c%c%c%c"), + buff.st_mode & wxS_IRUSR ? wxT('r') : wxT('-'), + buff.st_mode & wxS_IWUSR ? wxT('w') : wxT('-'), + buff.st_mode & wxS_IXUSR ? wxT('x') : wxT('-'), + buff.st_mode & wxS_IRGRP ? wxT('r') : wxT('-'), + buff.st_mode & wxS_IWGRP ? wxT('w') : wxT('-'), + buff.st_mode & wxS_IXGRP ? wxT('x') : wxT('-'), + buff.st_mode & wxS_IROTH ? wxT('r') : wxT('-'), + buff.st_mode & wxS_IWOTH ? wxT('w') : wxT('-'), + buff.st_mode & wxS_IXOTH ? wxT('x') : wxT('-')); + } #elif defined(__WIN32__) DWORD attribs = ::GetFileAttributes(m_filePath.c_str()); if (attribs != (DWORD)-1) -- 2.45.2