From 30d306c255d26532e461b4e0b047b05db6ed49aa Mon Sep 17 00:00:00 2001 From: "bryner%brianryner.com" Date: Tue, 1 Feb 2005 19:31:56 +0000 Subject: [PATCH] Throw a binding exception when the submission attribute does not reference a valid xforms:submission element. Bug 279552, patch by smaug@welho.com, r=aaronr@us.ibm.com, sr=me. git-svn-id: svn://10.0.0.236/trunk@168655 18797224-902f-48f8-a5cc-f745e15eee43 --- .../extensions/xforms/nsXFormsSendElement.cpp | 17 +++++++++-------- .../xforms/nsXFormsTriggerElement.cpp | 9 +++++++-- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/mozilla/extensions/xforms/nsXFormsSendElement.cpp b/mozilla/extensions/xforms/nsXFormsSendElement.cpp index 393caffc85e..cabdbc8c2db 100644 --- a/mozilla/extensions/xforms/nsXFormsSendElement.cpp +++ b/mozilla/extensions/xforms/nsXFormsSendElement.cpp @@ -58,9 +58,10 @@ nsXFormsSendElement::HandleAction(nsIDOMEvent* aEvent, if (!mElement) return NS_OK; - nsAutoString submission; - mElement->GetAttribute(NS_LITERAL_STRING("submission"), submission); - if (submission.IsEmpty()) + NS_NAMED_LITERAL_STRING(submission, "submission"); + nsAutoString submissionID; + mElement->GetAttribute(NS_LITERAL_STRING("submission"), submissionID); + if (submissionID.IsEmpty()) return NS_OK; nsCOMPtr doc; @@ -69,11 +70,11 @@ nsXFormsSendElement::HandleAction(nsIDOMEvent* aEvent, return NS_OK; nsCOMPtr el; - doc->GetElementById(submission, getter_AddRefs(el)); - if (!el) - return NS_OK; - - //XXX Check the element type when we have the submission element + doc->GetElementById(submissionID, getter_AddRefs(el)); + + if (!el || !nsXFormsUtils::IsXFormsElement(el, submission)) { + return nsXFormsUtils::DispatchEvent(mElement, eEvent_BindingException); + } return nsXFormsUtils::DispatchEvent(el, eEvent_Submit); } diff --git a/mozilla/extensions/xforms/nsXFormsTriggerElement.cpp b/mozilla/extensions/xforms/nsXFormsTriggerElement.cpp index 3b08603e0f6..6fb34b44f1b 100644 --- a/mozilla/extensions/xforms/nsXFormsTriggerElement.cpp +++ b/mozilla/extensions/xforms/nsXFormsTriggerElement.cpp @@ -159,8 +159,9 @@ nsXFormsSubmitElement::HandleDefault(nsIDOMEvent *aEvent, PRBool *aHandled) if (!(*aHandled = type.EqualsLiteral("DOMActivate"))) return NS_OK; + NS_NAMED_LITERAL_STRING(submission, "submission"); nsAutoString submissionID; - mElement->GetAttribute(NS_LITERAL_STRING("submission"), submissionID); + mElement->GetAttribute(submission, submissionID); nsCOMPtr ownerDoc; mElement->GetOwnerDocument(getter_AddRefs(ownerDoc)); @@ -168,7 +169,11 @@ nsXFormsSubmitElement::HandleDefault(nsIDOMEvent *aEvent, PRBool *aHandled) nsCOMPtr submissionElement; ownerDoc->GetElementById(submissionID, getter_AddRefs(submissionElement)); - NS_ENSURE_STATE(submissionElement); + + if (!submissionElement || + !nsXFormsUtils::IsXFormsElement(submissionElement, submission)) { + return nsXFormsUtils::DispatchEvent(mElement, eEvent_BindingException); + } nsCOMPtr targ = do_QueryInterface(submissionElement); NS_ASSERTION(targ, "All elements should support nsIDOMEventTarget");