From 76bebc65c00ca096f074e778b1c1957d5a887ee7 Mon Sep 17 00:00:00 2001 From: "mrbkap%gmail.com" Date: Wed, 7 Jun 2006 17:15:51 +0000 Subject: [PATCH] Protect against null contexts. bug 340602, r+sr=roc git-svn-id: svn://10.0.0.236/trunk@199426 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/content/base/src/nsContentUtils.cpp | 8 ++++++-- mozilla/dom/src/base/nsLocation.cpp | 7 ++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/mozilla/content/base/src/nsContentUtils.cpp b/mozilla/content/base/src/nsContentUtils.cpp index 93c2727b667..cb20e780c6b 100644 --- a/mozilla/content/base/src/nsContentUtils.cpp +++ b/mozilla/content/base/src/nsContentUtils.cpp @@ -2234,19 +2234,23 @@ IsContextOnStack(nsIJSContextStack *aStack, JSContext *aContext) return PR_FALSE; if (ctx == aContext) return PR_TRUE; - + nsCOMPtr iterator(do_CreateInstance("@mozilla.org/js/xpc/ContextStackIterator;1")); NS_ENSURE_TRUE(iterator, PR_FALSE); nsresult rv = iterator->Reset(aStack); NS_ENSURE_SUCCESS(rv, PR_FALSE); - + PRBool done; while (NS_SUCCEEDED(iterator->Done(&done)) && !done) { rv = iterator->Prev(&ctx); NS_ASSERTION(NS_SUCCEEDED(rv), "Broken iterator implementation"); + if (!ctx) { + continue; + } + if (nsJSUtils::GetDynamicScriptContext(ctx) && ctx == aContext) return PR_TRUE; } diff --git a/mozilla/dom/src/base/nsLocation.cpp b/mozilla/dom/src/base/nsLocation.cpp index 99933f9b39b..edfd3739c09 100644 --- a/mozilla/dom/src/base/nsLocation.cpp +++ b/mozilla/dom/src/base/nsLocation.cpp @@ -82,12 +82,17 @@ GetContextFromStack(nsIJSContextStack *aStack, JSContext **aContext) nsresult rv = iterator->Reset(aStack); NS_ENSURE_SUCCESS(rv, rv); - + PRBool done; while (NS_SUCCEEDED(iterator->Done(&done)) && !done) { rv = iterator->Prev(aContext); NS_ASSERTION(NS_SUCCEEDED(rv), "Broken iterator implementation"); + // Consider a null context the end of the line. + if (!*aContext) { + break; + } + if (nsJSUtils::GetDynamicScriptContext(*aContext)) { return NS_OK; }