Bug 691215. Fix stupid logic error in the XML prettyprinter that can cause a null-dereference crash. r=sicking

This commit is contained in:
Boris Zbarsky 2011-10-03 15:13:33 -04:00
parent 11b5bde3e2
commit e89f458efd
3 changed files with 54 additions and 1 deletions

View File

@ -198,7 +198,7 @@ nsXMLPrettyPrinter::MaybeUnhook(nsIContent* aContent)
{
// If there either aContent is null (the document-node was modified) or
// there isn't a binding parent we know it's non-anonymous content.
if (!aContent || !aContent->GetBindingParent() && !mUnhookPending) {
if ((!aContent || !aContent->GetBindingParent()) && !mUnhookPending) {
// Can't blindly to mUnhookPending after AddScriptRunner,
// since AddScriptRunner _could_ in theory run us
// synchronously

View File

@ -54,6 +54,7 @@ _TEST_FILES = test_bug232004.xhtml \
test_bug293347.html \
file_bug293347.xml \
file_bug293347xslt.xml \
test_bug691215.html \
$(NULL)
libs:: $(_TEST_FILES)

View File

@ -0,0 +1,52 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=691215
-->
<head>
<title>Test for Bug 691215</title>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=691215">Mozilla Bug 691215</a>
<p id="display"></p>
<div id="content" style="display: none">
</div>
<pre id="test">
<script type="application/javascript">
/** Test for Bug 691215 **/
SimpleTest.waitForExplicitFinish();
var url = "data:text/xml,<root/>";
var w;
addLoadEvent(function() {
// Need a separate window because we do not prettyprint in iframes. This is
// why this test can't be a crashtest.
w = window.open(url);
// Need to poll for load completion, sadly
setTimeout(checker, 0);
});
function checker() {
if (w.location.href != url ||
w.document.readyState != "complete") {
setTimeout(checker, 0);
return;
}
var doc = w.document;
var n = doc.createElement("span");
doc.replaceChild(n, doc.documentElement);
w.close();
ok(1, "Hey, we got here, that's good");
SimpleTest.finish();
}
</script>
</pre>
</body>
</html>