From 870c86bc51b30019f34d178ea415cafe7091759d Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Fri, 29 Apr 2005 09:14:27 +0000 Subject: [PATCH] AdjustScrollbars can go into an infinite loop, so bail out after a few iterations. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33915 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 4 ++++ src/generic/scrlwing.cpp | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/changes.txt b/docs/changes.txt index 1cc442e053..5500ee0fd4 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -9,6 +9,10 @@ All: - Added wxLaunchDefaultBrowser. +All (GUI): + +- Fixed potential infinite loop when adjusting wxScrolledWindow scrollbars. + wxMSW: - Fixed erroneous selection of content in wxComboBox when within a wxStaticBox diff --git a/src/generic/scrlwing.cpp b/src/generic/scrlwing.cpp index 94a3d59f5f..7c21cb2f1d 100644 --- a/src/generic/scrlwing.cpp +++ b/src/generic/scrlwing.cpp @@ -649,8 +649,13 @@ void wxScrollHelper::AdjustScrollbars() // it here for now but it would be better to ensure that all ports // generate EVT_SIZE when scrollbars [dis]appear, emulating it if // necessary, and remove it later + // JACS: Stop potential infinite loop by limiting number of iterations + int iterationCount = 0; + const int iterationMax = 5; do { + iterationCount ++; + GetTargetSize(&w, 0); // scroll lines per page: if 0, no scrolling is needed @@ -762,7 +767,7 @@ void wxScrollHelper::AdjustScrollbars() oldh = h; GetTargetSize( &w, &h ); - } while ( w != oldw || h != oldh ); + } while ( (w != oldw || h != oldh) && (iterationCount < iterationMax) ); #ifdef __WXMOTIF__ // Sorry, some Motif-specific code to implement a backing pixmap -- 2.45.2