From baa1771049988b0142a694e25f47f3f35878eb87 Mon Sep 17 00:00:00 2001 From: =?utf8?q?W=C5=82odzimierz=20Skiba?= Date: Mon, 21 Mar 2005 16:09:04 +0000 Subject: [PATCH] Check for empty page location to avoid crash in lack of selected book (solves bug #1121381). git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@32955 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/html/helpfrm.cpp | 71 ++++++++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 32 deletions(-) diff --git a/src/html/helpfrm.cpp b/src/html/helpfrm.cpp index 0e107c11cc..9f53a7fb62 100644 --- a/src/html/helpfrm.cpp +++ b/src/html/helpfrm.cpp @@ -125,6 +125,22 @@ class wxHtmlHelpHtmlWindow : public wxHtmlWindow m_Frame->NotifyPageChanged(); } + // Returns full location with anchor (helper) + static wxString GetOpenedPageWithAnchor(wxHtmlWindow *win) + { + if(!win) + return wxEmptyString; + + wxString an = win->GetOpenedAnchor(); + wxString pg = win->GetOpenedPage(); + if(!an.empty()) + { + pg << wxT("#"); + pg << an; + } + return pg; + } + private: wxHtmlHelpFrame *m_Frame; @@ -682,7 +698,7 @@ void wxHtmlHelpFrame::SetTitleFormat(const wxString& format) bool wxHtmlHelpFrame::Display(const wxString& x) { wxString url = m_Data->FindPageByName(x); - if (!url.IsEmpty()) + if (!url.empty()) { m_HtmlWin->LoadPage(url); NotifyPageChanged(); @@ -695,7 +711,7 @@ bool wxHtmlHelpFrame::Display(const wxString& x) bool wxHtmlHelpFrame::Display(const int id) { wxString url = m_Data->FindPageById(id); - if (!url.IsEmpty()) + if (!url.empty()) { m_HtmlWin->LoadPage(url); NotifyPageChanged(); @@ -725,7 +741,7 @@ bool wxHtmlHelpFrame::DisplayContents() if (m_Data->GetBookRecArray().GetCount() > 0) { wxHtmlBookRecord& book = m_Data->GetBookRecArray()[0]; - if (!book.GetStart().IsEmpty()) + if (!book.GetStart().empty()) m_HtmlWin->LoadPage(book.GetFullPath(book.GetStart())); } @@ -751,7 +767,7 @@ bool wxHtmlHelpFrame::DisplayIndex() if (m_Data->GetBookRecArray().GetCount() > 0) { wxHtmlBookRecord& book = m_Data->GetBookRecArray()[0]; - if (!book.GetStart().IsEmpty()) + if (!book.GetStart().empty()) m_HtmlWin->LoadPage(book.GetFullPath(book.GetStart())); } @@ -1353,12 +1369,11 @@ void wxHtmlHelpFrame::NotifyPageChanged() { if (m_UpdateContents && m_PagesHash) { - wxString an = m_HtmlWin->GetOpenedAnchor(); - wxHtmlHelpHashData *ha; - if (an.IsEmpty()) - ha = (wxHtmlHelpHashData*) m_PagesHash->Get(m_HtmlWin->GetOpenedPage()); - else - ha = (wxHtmlHelpHashData*) m_PagesHash->Get(m_HtmlWin->GetOpenedPage() + wxT("#") + an); + wxString page = wxHtmlHelpHtmlWindow::GetOpenedPageWithAnchor(m_HtmlWin); + wxHtmlHelpHashData *ha = NULL; + if (!page.empty()) + ha = (wxHtmlHelpHashData*) m_PagesHash->Get(page); + if (ha) { bool olduc = m_UpdateContents; @@ -1408,12 +1423,10 @@ void wxHtmlHelpFrame::OnToolbar(wxCommandEvent& event) case wxID_HTML_UP : if (m_PagesHash) { - wxString an = m_HtmlWin->GetOpenedAnchor(); - wxHtmlHelpHashData *ha; - if (an.IsEmpty()) - ha = (wxHtmlHelpHashData*) m_PagesHash->Get(m_HtmlWin->GetOpenedPage()); - else - ha = (wxHtmlHelpHashData*) m_PagesHash->Get(m_HtmlWin->GetOpenedPage() + wxT("#") + an); + wxString page = wxHtmlHelpHtmlWindow::GetOpenedPageWithAnchor(m_HtmlWin); + wxHtmlHelpHashData *ha = NULL; + if (!page.empty()) + ha = (wxHtmlHelpHashData*) m_PagesHash->Get(page); if (ha && ha->m_Index > 0) { const wxHtmlHelpDataItem& it = m_Data->GetContentsArray()[ha->m_Index - 1]; @@ -1429,12 +1442,10 @@ void wxHtmlHelpFrame::OnToolbar(wxCommandEvent& event) case wxID_HTML_UPNODE : if (m_PagesHash) { - wxString an = m_HtmlWin->GetOpenedAnchor(); - wxHtmlHelpHashData *ha; - if (an.IsEmpty()) - ha = (wxHtmlHelpHashData*) m_PagesHash->Get(m_HtmlWin->GetOpenedPage()); - else - ha = (wxHtmlHelpHashData*) m_PagesHash->Get(m_HtmlWin->GetOpenedPage() + wxT("#") + an); + wxString page = wxHtmlHelpHtmlWindow::GetOpenedPageWithAnchor(m_HtmlWin); + wxHtmlHelpHashData *ha = NULL; + if (!page.empty()) + ha = (wxHtmlHelpHashData*) m_PagesHash->Get(page); if (ha && ha->m_Index > 0) { int level = @@ -1463,21 +1474,17 @@ void wxHtmlHelpFrame::OnToolbar(wxCommandEvent& event) case wxID_HTML_DOWN : if (m_PagesHash) { - wxString an = m_HtmlWin->GetOpenedAnchor(); - wxString adr; - wxHtmlHelpHashData *ha; - - if (an.IsEmpty()) adr = m_HtmlWin->GetOpenedPage(); - else adr = m_HtmlWin->GetOpenedPage() + wxT("#") + an; - - ha = (wxHtmlHelpHashData*) m_PagesHash->Get(adr); + wxString page = wxHtmlHelpHtmlWindow::GetOpenedPageWithAnchor(m_HtmlWin); + wxHtmlHelpHashData *ha = NULL; + if (!page.empty()) + ha = (wxHtmlHelpHashData*) m_PagesHash->Get(page); const wxHtmlHelpDataItems& contents = m_Data->GetContentsArray(); if (ha && ha->m_Index < (int)contents.size() - 1) { size_t idx = ha->m_Index + 1; - while (contents[idx].GetFullPath() == adr) idx++; + while (contents[idx].GetFullPath() == page) idx++; if (!contents[idx].page.empty()) { @@ -1576,7 +1583,7 @@ void wxHtmlHelpFrame::OnToolbar(wxCommandEvent& event) filemask, wxOPEN | wxFILE_MUST_EXIST, this); - if (!s.IsEmpty()) + if (!s.empty()) { wxString ext = s.Right(4).Lower(); if (ext == _T(".zip") || ext == _T(".htb") || -- 2.45.2