40 lines
1.9 KiB
Text
40 lines
1.9 KiB
Text
Bug 485286 - Allocate all of these consistently. r+sr=peterv/sicking a=ss
|
|
|
|
diff --git a/extensions/transformiix/source/xslt/functions/txKeyFunctionCall.cpp b/extensions/transformiix/source/xslt/functions/txKeyFunctionCall.cpp
|
|
--- extensions/transformiix/source/xslt/functions/txKeyFunctionCall.cpp
|
|
+++ extensions/transformiix/source/xslt/functions/txKeyFunctionCall.cpp
|
|
@@ -401,26 +401,30 @@ nsresult txXSLKey::testNode(const txXPat
|
|
txExecutionState& aEs)
|
|
{
|
|
nsAutoString val;
|
|
txListIterator iter(&mKeys);
|
|
while (iter.hasNext())
|
|
{
|
|
Key* key = (Key*)iter.next();
|
|
if (key->matchPattern->matches(aNode, &aEs)) {
|
|
- txSingleNodeContext evalContext(aNode, &aEs);
|
|
- nsresult rv = aEs.pushEvalContext(&evalContext);
|
|
+ txSingleNodeContext *evalContext =
|
|
+ new txSingleNodeContext(aNode, &aEs);
|
|
+ NS_ENSURE_TRUE(evalContext, NS_ERROR_OUT_OF_MEMORY);
|
|
+
|
|
+ nsresult rv = aEs.pushEvalContext(evalContext);
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
nsRefPtr<txAExprResult> exprResult;
|
|
- rv = key->useExpr->evaluate(&evalContext,
|
|
+ rv = key->useExpr->evaluate(evalContext,
|
|
getter_AddRefs(exprResult));
|
|
- aEs.popEvalContext();
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
+ delete aEs.popEvalContext();
|
|
+
|
|
if (exprResult->getResultType() == txAExprResult::NODESET) {
|
|
txNodeSet* res = NS_STATIC_CAST(txNodeSet*,
|
|
NS_STATIC_CAST(txAExprResult*,
|
|
exprResult));
|
|
PRInt32 i;
|
|
for (i = 0; i < res->size(); ++i) {
|
|
val.Truncate();
|
|
txXPathNodeUtils::appendNodeValue(res->get(i), val);
|