From: Ryan Norton Date: Sun, 17 Apr 2005 14:08:43 +0000 (+0000) Subject: fix some possible crashes due to uninitialized variables - thanks to Steve Hartwell... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/03271fa7a501c008c5ea729f170a4cf7ef853937 fix some possible crashes due to uninitialized variables - thanks to Steve Hartwell for pointing me in the right direction :). Also implement wxFileTypeImpl::GetCommands. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33705 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/mac/carbon/mimetmac.cpp b/src/mac/carbon/mimetmac.cpp index 8ff9ad0416..ff77f1c441 100644 --- a/src/mac/carbon/mimetmac.cpp +++ b/src/mac/carbon/mimetmac.cpp @@ -322,11 +322,15 @@ class WXDLLEXPORT wxIcon; bool wxFileTypeImpl::SetCommand(const wxString& cmd, const wxString& verb, bool overwriteprompt) { + wxASSERT_MSG( m_manager != NULL , wxT("Bad wxFileType") ); + return FALSE; } bool wxFileTypeImpl::SetDefaultIcon(const wxString& strIcon, int index) { + wxASSERT_MSG( m_manager != NULL , wxT("Bad wxFileType") ); + return FALSE; } @@ -372,10 +376,7 @@ wxFileTypeImpl::GetPrintCommand(wxString *printCmd, wxString wxFileTypeImpl::GetCommand(const wxString& verb) const { - wxASSERT(m_manager); - - if(!m_manager) - return wxEmptyString; + wxASSERT_MSG( m_manager != NULL , wxT("Bad wxFileType") ); if(verb == wxT("open")) { @@ -421,10 +422,7 @@ wxString wxFileTypeImpl::GetCommand(const wxString& verb) const wxString wxFileTypeImpl::GetCommand(const wxString& verb) const { - wxASSERT(m_manager); - - if(!m_manager) - return wxEmptyString; + wxASSERT_MSG( m_manager != NULL , wxT("Bad wxFileType") ); if(verb == wxT("open")) { @@ -486,8 +484,7 @@ wxString wxFileTypeImpl::GetCommand(const wxString& verb) const bool wxFileTypeImpl::GetExtensions(wxArrayString& extensions) { - if(!m_manager) - return false; + wxASSERT_MSG( m_manager != NULL , wxT("Bad wxFileType") ); ICMapEntry entry; ICGetMapEntry( (ICInstance) m_manager->m_hIC, @@ -502,8 +499,7 @@ bool wxFileTypeImpl::GetExtensions(wxArrayString& extensions) bool wxFileTypeImpl::GetMimeType(wxString *mimeType) const { - if(!m_manager) - return false; + wxASSERT_MSG( m_manager != NULL , wxT("Bad wxFileType") ); ICMapEntry entry; ICGetMapEntry( (ICInstance) m_manager->m_hIC, @@ -530,14 +526,15 @@ bool wxFileTypeImpl::GetMimeTypes(wxArrayString& mimeTypes) const bool wxFileTypeImpl::GetIcon(wxIconLocation *WXUNUSED(icon)) const { + wxASSERT_MSG( m_manager != NULL , wxT("Bad wxFileType") ); + // no such file type or no value or incorrect icon entry return FALSE; } bool wxFileTypeImpl::GetDescription(wxString *desc) const { - if(!m_manager) - return false; + wxASSERT_MSG( m_manager != NULL , wxT("Bad wxFileType") ); ICMapEntry entry; ICGetMapEntry( (ICInstance) m_manager->m_hIC, @@ -551,8 +548,19 @@ bool wxFileTypeImpl::GetDescription(wxString *desc) const size_t wxFileTypeImpl::GetAllCommands(wxArrayString * verbs, wxArrayString * commands, const wxFileType::MessageParameters& params) const { - wxFAIL_MSG( _T("wxFileTypeImpl::GetAllCommands() not yet implemented") ); - return 0; + wxASSERT_MSG( m_manager != NULL , wxT("Bad wxFileType") ); + + wxString sCommand; + size_t ulCount = 0; + + if(GetOpenCommand(&sCommand, params)) + { + verbs->Add(wxString(wxT("open"))); + commands->Add(sCommand); + ++ulCount; + } + + return ulCount; } void wxMimeTypesManagerImpl::Initialize(int mailcapStyles, const wxString& extraDir) @@ -570,6 +578,7 @@ void wxMimeTypesManagerImpl::Initialize(int mailcapStyles, const wxString& extra { wxLogDebug(wxT("Could not initialize wxMimeTypesManager!")); wxASSERT( false ); + m_hIC = NULL; return; } @@ -633,6 +642,11 @@ void wxMimeTypesManagerImpl::ClearData() } } +// +// Q) Iterating through the map - why does it use if (err == noErr) instead of just asserting? +// A) Some intermediate indexes are bad while subsequent ones may be good. Its wierd, I know. +// + // extension -> file type wxFileType* wxMimeTypesManagerImpl::GetFileTypeFromExtension(const wxString& e) { @@ -640,7 +654,6 @@ wxFileType* wxMimeTypesManagerImpl::GetFileTypeFromExtension(const wxString& e) //low level functions - iterate through the database ICMapEntry entry; - wxFileType* pFileType; long pos; for(long i = 1; i <= m_lCount; ++i) @@ -652,14 +665,14 @@ wxFileType* wxMimeTypesManagerImpl::GetFileTypeFromExtension(const wxString& e) wxString sCurrentExtension = wxMacMakeStringFromPascal(entry.extension); if( sCurrentExtension.Right(sCurrentExtension.Length()-1) == e ) //entry has period in it { - pFileType = new wxFileType(); + wxFileType* pFileType = new wxFileType(); pFileType->m_impl->Init((wxMimeTypesManagerImpl*)this, pos); - break; + return pFileType; } } } - return pFileType; + return NULL; } // MIME type -> extension -> file type @@ -669,8 +682,6 @@ wxFileType* wxMimeTypesManagerImpl::GetFileTypeFromMimeType(const wxString& mime //low level functions - iterate through the database ICMapEntry entry; - wxFileType* pFileType; - long pos; for(long i = 1; i <= m_lCount; ++i) @@ -682,14 +693,14 @@ wxFileType* wxMimeTypesManagerImpl::GetFileTypeFromMimeType(const wxString& mime { if( wxMacMakeStringFromPascal(entry.MIMEType) == mimeType) { - pFileType = new wxFileType(); + wxFileType* pFileType = new wxFileType(); pFileType->m_impl->Init((wxMimeTypesManagerImpl*)this, pos); - break; + return pFileType; } } } - return pFileType; + return NULL; } size_t wxMimeTypesManagerImpl::EnumAllFileTypes(wxArrayString& mimetypes) @@ -698,8 +709,8 @@ size_t wxMimeTypesManagerImpl::EnumAllFileTypes(wxArrayString& mimetypes) //low level functions - iterate through the database ICMapEntry entry; - long pos; + long lStartCount = (long) mimetypes.GetCount(); for(long i = 1; i <= m_lCount; ++i)