Add a sanity check for AdjustPagebreak() implementation
Verify that this function never adjusts page break so far back that it comes before the previous one (or even at the same position). This avoids infinite loops in CountPages() even if a custom cell class implements its overridden AdjustPagebreak() incorrectly.
This commit is contained in:
@@ -151,9 +151,16 @@ int wxHtmlDCRenderer::FindNextPageBreak(const wxArrayInt& known_pagebreaks,
|
|||||||
if ( pos != 0 && pos >= GetTotalHeight() )
|
if ( pos != 0 && pos >= GetTotalHeight() )
|
||||||
return wxNOT_FOUND;
|
return wxNOT_FOUND;
|
||||||
|
|
||||||
pos += m_Height;
|
int posNext = pos + m_Height;
|
||||||
m_Cells->AdjustPagebreak(&pos, known_pagebreaks, m_Height);
|
if ( m_Cells->AdjustPagebreak(&posNext, known_pagebreaks, m_Height) )
|
||||||
return pos;
|
{
|
||||||
|
// Check that AdjustPagebreak() returns the page break at a strictly
|
||||||
|
// greater position than that of the previous page, otherwise
|
||||||
|
// CountPages() would enter into an infinite loop.
|
||||||
|
wxCHECK_MSG( posNext > pos, wxNOT_FOUND, "Bug in AdjustPagebreak()" );
|
||||||
|
}
|
||||||
|
|
||||||
|
return posNext;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxHtmlDCRenderer::Render(int x, int y, int from, int to)
|
void wxHtmlDCRenderer::Render(int x, int y, int from, int to)
|
||||||
|
Reference in New Issue
Block a user