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
This commit is contained in:
@@ -223,32 +223,39 @@ void wxFileData::ReadData()
|
|||||||
wxStructStat buff;
|
wxStructStat buff;
|
||||||
|
|
||||||
#if defined(__UNIX__) && (!defined( __OS2__ ) && !defined(__VMS))
|
#if defined(__UNIX__) && (!defined( __OS2__ ) && !defined(__VMS))
|
||||||
lstat( m_filePath.fn_str(), &buff );
|
const bool hasStat = lstat( m_filePath.fn_str(), &buff ) == 0;
|
||||||
m_type |= S_ISLNK(buff.st_mode) ? is_link : 0;
|
if ( hasStat )
|
||||||
|
m_type |= S_ISLNK(buff.st_mode) ? is_link : 0;
|
||||||
#else // no lstat()
|
#else // no lstat()
|
||||||
wxStat( m_filePath, &buff );
|
const bool hasStat = wxStat( m_filePath, &buff ) == 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
m_type |= (buff.st_mode & S_IFDIR) != 0 ? is_dir : 0;
|
if ( hasStat )
|
||||||
m_type |= (buff.st_mode & wxS_IXUSR) != 0 ? is_exe : 0;
|
{
|
||||||
|
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
|
#endif
|
||||||
// __WXWINCE__
|
// __WXWINCE__
|
||||||
|
|
||||||
#if defined(__UNIX__)
|
#if defined(__UNIX__)
|
||||||
m_permissions.Printf(wxT("%c%c%c%c%c%c%c%c%c"),
|
if ( hasStat )
|
||||||
buff.st_mode & wxS_IRUSR ? wxT('r') : wxT('-'),
|
{
|
||||||
buff.st_mode & wxS_IWUSR ? wxT('w') : wxT('-'),
|
m_permissions.Printf(wxT("%c%c%c%c%c%c%c%c%c"),
|
||||||
buff.st_mode & wxS_IXUSR ? wxT('x') : wxT('-'),
|
buff.st_mode & wxS_IRUSR ? wxT('r') : wxT('-'),
|
||||||
buff.st_mode & wxS_IRGRP ? wxT('r') : wxT('-'),
|
buff.st_mode & wxS_IWUSR ? wxT('w') : wxT('-'),
|
||||||
buff.st_mode & wxS_IWGRP ? wxT('w') : wxT('-'),
|
buff.st_mode & wxS_IXUSR ? wxT('x') : wxT('-'),
|
||||||
buff.st_mode & wxS_IXGRP ? wxT('x') : wxT('-'),
|
buff.st_mode & wxS_IRGRP ? wxT('r') : wxT('-'),
|
||||||
buff.st_mode & wxS_IROTH ? wxT('r') : wxT('-'),
|
buff.st_mode & wxS_IWGRP ? wxT('w') : wxT('-'),
|
||||||
buff.st_mode & wxS_IWOTH ? wxT('w') : wxT('-'),
|
buff.st_mode & wxS_IXGRP ? wxT('x') : wxT('-'),
|
||||||
buff.st_mode & wxS_IXOTH ? 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__)
|
#elif defined(__WIN32__)
|
||||||
DWORD attribs = ::GetFileAttributes(m_filePath.c_str());
|
DWORD attribs = ::GetFileAttributes(m_filePath.c_str());
|
||||||
if (attribs != (DWORD)-1)
|
if (attribs != (DWORD)-1)
|
||||||
|
Reference in New Issue
Block a user