[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdelibs/khtml/html
From: Maks Orlovich <maksim () kde ! org>
Date: 2005-07-09 23:03:12
Message-ID: 1120950192.721281.450.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 433186 by orlovich:
Fix at least one of the reasons for this:
konqueror: /home/maksim/kde3/kdelibs/khtml/misc/loader.cpp:1307: static void \
khtml::Cache::clear(): Assertion `it.current()->canDelete()' failed. And actually, \
quite a bit of other potential leaks or worse in the parser. Unlike in WC, khtml's \
parser's element stack ref's and deref's elements. So it's not right to merely \
change the pointer in the stack without updating the refcounts. Testcase upcoming. \
Thanks to Ismail for the test page.
May or may not help #85057
CCBUG:85057
M +12 -5 htmlparser.cpp
--- trunk/KDE/kdelibs/khtml/html/htmlparser.cpp #433185:433186
@@ -86,6 +86,13 @@
~HTMLStackElem()
{ node->deref(); }
+ void setNode(NodeImpl* newNode)
+ {
+ newNode->ref();
+ node->deref();
+ node = newNode;
+ }
+
int id;
int level;
bool strayTableContent;
@@ -1301,7 +1308,7 @@
HTMLStackElem* nextElem = currElem->next;
if (!isResidualStyleTag(currElem->id)) {
prevElem->next = nextElem;
- prevElem->node = currElem->node;
+ prevElem->setNode(currElem->node);
delete currElem;
}
else
@@ -1326,7 +1333,7 @@
currNode = currElem->node->cloneNode(false);
// Change the stack element's node to point to the clone.
- currElem->node = currNode;
+ currElem->setNode(currNode);
// Attach the previous node as a child of this new node.
if (prevNode)
@@ -1386,7 +1393,7 @@
currElem = currElem->next;
}
prevElem->next = elem->next;
- prevElem->node = elem->node;
+ prevElem->setNode(elem->node);
delete elem;
// Step 7: Reopen intermediate inlines, e.g., <b><p><i>Foo</b>Goo</p>.
@@ -1407,7 +1414,7 @@
// curr->id rather than the node that you should pop to when the element \
gets pulled off // the stack.
popOneBlock(false);
- curr->node = currNode;
+ curr->setNode(currNode);
curr->next = residualStyleStack;
residualStyleStack = curr;
}
@@ -1541,7 +1548,7 @@
// the stack.
popOneBlock(false);
Elem->next = residualStyleStack;
- Elem->node = currNode;
+ Elem->setNode(currNode);
residualStyleStack = Elem;
}
else
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic