X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8e494db90ce964feef1ed3bd428462819def89c7..247afab527ec1355b9caaa0eea76b981db92a782:/src/html/htmlwin.cpp diff --git a/src/html/htmlwin.cpp b/src/html/htmlwin.cpp index 19c57ef57c..636a07610f 100644 --- a/src/html/htmlwin.cpp +++ b/src/html/htmlwin.cpp @@ -468,8 +468,14 @@ bool wxHtmlWindow::DoSetPage(const wxString& source) SetBackgroundImage(wxNullBitmap); m_Parser->SetDC(dc); - - delete m_Cell; + if (m_Cell) + { + delete m_Cell; + // notice that it's important to set m_Cell to NULL here before calling + // Parse() below, even if it will be overwritten by its return value: + // without this we may crash if it's used from inside Parse() + m_Cell = NULL; + } m_Cell = (wxHtmlContainerCell*) m_Parser->Parse(newsrc); delete dc; m_Cell->SetIndent(m_Borders, wxHTML_INDENT_ALL, wxHTML_UNITS_PIXELS); @@ -651,6 +657,16 @@ bool wxHtmlWindow::ScrollToAnchor(const wxString& anchor) } else { + // Go to next visible cell in current container, if it exists. This + // yields a bit better (even though still imperfect) results in that + // there's better chance of using a suitable cell for upper Y + // coordinate value. See bug #11406 for additional discussion. + const wxHtmlCell *c_save = c; + while ( c && c->IsFormattingCell() ) + c = c->GetNext(); + if ( !c ) + c = c_save; + int y; for (y = 0; c != NULL; c = c->GetParent()) y += c->GetPosY();