From 6b1af498feffd511e6b783988f3db5ebd45aa353 Mon Sep 17 00:00:00 2001 From: "mjudge%netscape.com" Date: Wed, 22 Sep 1999 06:12:44 +0000 Subject: [PATCH] recursion failing finding the same frame we started with sometimes with generated content from style. simple 2 line check to avoind this. dagley said ok to check in red tree since not hurting anyone. git-svn-id: svn://10.0.0.236/trunk@48812 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/layout/generic/nsFrame.cpp | 11 ++++++++++- mozilla/layout/html/base/src/nsFrame.cpp | 11 ++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/mozilla/layout/generic/nsFrame.cpp b/mozilla/layout/generic/nsFrame.cpp index 56a53741b2b..bc9ab0e05f8 100644 --- a/mozilla/layout/generic/nsFrame.cpp +++ b/mozilla/layout/generic/nsFrame.cpp @@ -2023,7 +2023,16 @@ nsFrame::PeekOffset(nsPeekOffsetStruct *aPos) edgeCase, //start from thisLine &(aPos->mResultFrame) ); - doneLooping = PR_TRUE; //do not continue with while loop + if (aPos->mResultFrame == this)//we came back to same spot! keep going + { + aPos->mResultFrame = nsnull; + if (aPos->mDirection == eDirPrevious) + thisLine--; + else + thisLine++; + } + else + doneLooping = PR_TRUE; //do not continue with while loop if (NS_SUCCEEDED(result) && aPos->mResultFrame){ result = aPos->mResultFrame->QueryInterface(nsILineIterator::GetIID(),getter_AddRefs(it)); if (NS_SUCCEEDED(result) && it)//we have struck another block element! diff --git a/mozilla/layout/html/base/src/nsFrame.cpp b/mozilla/layout/html/base/src/nsFrame.cpp index 56a53741b2b..bc9ab0e05f8 100644 --- a/mozilla/layout/html/base/src/nsFrame.cpp +++ b/mozilla/layout/html/base/src/nsFrame.cpp @@ -2023,7 +2023,16 @@ nsFrame::PeekOffset(nsPeekOffsetStruct *aPos) edgeCase, //start from thisLine &(aPos->mResultFrame) ); - doneLooping = PR_TRUE; //do not continue with while loop + if (aPos->mResultFrame == this)//we came back to same spot! keep going + { + aPos->mResultFrame = nsnull; + if (aPos->mDirection == eDirPrevious) + thisLine--; + else + thisLine++; + } + else + doneLooping = PR_TRUE; //do not continue with while loop if (NS_SUCCEEDED(result) && aPos->mResultFrame){ result = aPos->mResultFrame->QueryInterface(nsILineIterator::GetIID(),getter_AddRefs(it)); if (NS_SUCCEEDED(result) && it)//we have struck another block element!