diff --git a/accessible/src/base/nsAccessible.cpp b/accessible/src/base/nsAccessible.cpp index d697411ab11..232f1d46181 100644 --- a/accessible/src/base/nsAccessible.cpp +++ b/accessible/src/base/nsAccessible.cpp @@ -1639,6 +1639,14 @@ nsresult nsAccessible::AppendFlatStringFromContentNode(nsIContent *aContent, nsA nsresult nsAccessible::AppendFlatStringFromSubtree(nsIContent *aContent, nsAString *aFlatString) { + static nsIContent *startContent = nsnull; + // never run into the same content node, to prevent infinite recursion + if (startContent == aContent) { + return NS_OK; + } + if (!startContent) { + startContent = aContent; + } nsresult rv = AppendFlatStringFromSubtreeRecurse(aContent, aFlatString); if (NS_SUCCEEDED(rv) && !aFlatString->IsEmpty()) { nsAString::const_iterator start, end; @@ -1653,6 +1661,10 @@ nsresult nsAccessible::AppendFlatStringFromSubtree(nsIContent *aContent, nsAStri aFlatString->Truncate(aFlatString->Length() - spacesToTruncate); } + if (startContent == aContent) { + // we are leaving the original invoking + startContent = nsnull; + } return rv; }