From e0fa2e354f7da855d8b4faf7ea933bce772e8aa4 Mon Sep 17 00:00:00 2001 From: "aaronr%us.ibm.com" Date: Thu, 29 Jun 2006 16:51:22 +0000 Subject: [PATCH] [XForms] irrelevant attributes being submitted. Bug 342227, r=doronr+olli git-svn-id: svn://10.0.0.236/trunk@201240 18797224-902f-48f8-a5cc-f745e15eee43 --- .../xforms/nsXFormsSubmissionElement.cpp | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/mozilla/extensions/xforms/nsXFormsSubmissionElement.cpp b/mozilla/extensions/xforms/nsXFormsSubmissionElement.cpp index d10d56866db..65a1ec9b6e6 100644 --- a/mozilla/extensions/xforms/nsXFormsSubmissionElement.cpp +++ b/mozilla/extensions/xforms/nsXFormsSubmissionElement.cpp @@ -1321,6 +1321,8 @@ nsXFormsSubmissionElement::CopyChildren(nsIModelElementPrivate *aModel, aDest->AppendChild(destChild, getter_AddRefs(node)); } } + + break; } default: { @@ -1344,6 +1346,46 @@ nsXFormsSubmissionElement::CopyChildren(nsIModelElementPrivate *aModel, return NS_ERROR_ILLEGAL_VALUE; } + // If this node has attributes, make sure that we don't copy any + // that aren't relevant, etc. + PRBool hasAttrs = PR_FALSE; + currentNode->HasAttributes(&hasAttrs); + if ((type == nsIDOMNode::ELEMENT_NODE) && hasAttrs) { + nsCOMPtr attrMap; + nsCOMPtr attrNode, tempNode; + + currentNode->GetAttributes(getter_AddRefs(attrMap)); + NS_ENSURE_STATE(attrMap); + + nsresult rv = NS_OK; + PRUint32 length; + nsCOMPtr destElem(do_QueryInterface(destChild)); + attrMap->GetLength(&length); + + for (PRUint32 run = 0; run < length; ++run) { + attrMap->Item(run, getter_AddRefs(attrNode)); + NS_ENSURE_STATE(attrNode); + aModel->HandleInstanceDataNode(attrNode, &handleNodeResult); + + if (handleNodeResult == nsIModelElementPrivate::SUBMIT_SKIP_NODE) { + nsAutoString localName, namespaceURI; + + rv = attrNode->GetLocalName(localName); + NS_ENSURE_SUCCESS(rv, rv); + rv = attrNode->GetNamespaceURI(namespaceURI); + NS_ENSURE_SUCCESS(rv, rv); + rv = destElem->RemoveAttributeNS(namespaceURI, localName); + NS_ENSURE_SUCCESS(rv, rv); + } else if (handleNodeResult == + nsIModelElementPrivate::SUBMIT_ABORT_SUBMISSION) { + // abort + nsXFormsUtils::ReportError(NS_LITERAL_STRING("warnSubmitInvalidNode"), + currentNode, nsIScriptError::warningFlag); + return NS_ERROR_ILLEGAL_VALUE; + } + } + } + aDest->AppendChild(destChild, getter_AddRefs(node)); // recurse