From 0e505bd5eaea256fdd80000ead0d070afba1db2d Mon Sep 17 00:00:00 2001 From: "heikki%netscape.com" Date: Fri, 27 Sep 2002 23:30:10 +0000 Subject: [PATCH] Bug 169982, same origin check for serializeToStream. r=mstoltz, sr=jst. git-svn-id: svn://10.0.0.236/trunk@130619 18797224-902f-48f8-a5cc-f745e15eee43 --- .../xmlextras/base/src/nsDOMSerializer.cpp | 50 +++++++++++-------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/mozilla/extensions/xmlextras/base/src/nsDOMSerializer.cpp b/mozilla/extensions/xmlextras/base/src/nsDOMSerializer.cpp index ba457e665af..99a7ba617b7 100644 --- a/mozilla/extensions/xmlextras/base/src/nsDOMSerializer.cpp +++ b/mozilla/extensions/xmlextras/base/src/nsDOMSerializer.cpp @@ -133,14 +133,8 @@ static nsresult SetUpEncoder(nsIDOMNode *aRoot, const char* aCharset, nsIDocumen return rv; } -NS_IMETHODIMP -nsDOMSerializer::SerializeToString(nsIDOMNode *root, PRUnichar **_retval) +nsresult CheckSameOrigin(nsIDOMNode *aRoot) { - NS_ENSURE_ARG_POINTER(root); - NS_ENSURE_ARG_POINTER(_retval); - - *_retval = nsnull; - // Get JSContext from stack. nsCOMPtr stack = do_GetService("@mozilla.org/js/xpc/ContextStack;1"); @@ -157,10 +151,10 @@ nsDOMSerializer::SerializeToString(nsIDOMNode *root, PRUnichar **_retval) // We're called from script, make sure the caller and the root are // from the same origin... - nsCOMPtr owner_doc(do_QueryInterface(root)); + nsCOMPtr owner_doc(do_QueryInterface(aRoot)); if (!owner_doc) { - root->GetOwnerDocument(getter_AddRefs(owner_doc)); + aRoot->GetOwnerDocument(getter_AddRefs(owner_doc)); } nsCOMPtr doc(do_QueryInterface(owner_doc)); @@ -195,10 +189,22 @@ nsDOMSerializer::SerializeToString(nsIDOMNode *root, PRUnichar **_retval) } } - // We're ok security wise... +} + +NS_IMETHODIMP +nsDOMSerializer::SerializeToString(nsIDOMNode *aRoot, PRUnichar **_retval) +{ + NS_ENSURE_ARG_POINTER(aRoot); + NS_ENSURE_ARG_POINTER(_retval); + + *_retval = nsnull; + + nsresult rv = CheckSameOrigin(aRoot); + if (NS_FAILED(rv)) + return rv; nsCOMPtr encoder; - rv = SetUpEncoder(root,nsnull,getter_AddRefs(encoder)); + rv = SetUpEncoder(aRoot, nsnull, getter_AddRefs(encoder)); if (NS_FAILED(rv)) return rv; @@ -215,19 +221,23 @@ nsDOMSerializer::SerializeToString(nsIDOMNode *root, PRUnichar **_retval) } NS_IMETHODIMP -nsDOMSerializer::SerializeToStream(nsIDOMNode *root, - nsIOutputStream *stream, - const char *charset) +nsDOMSerializer::SerializeToStream(nsIDOMNode *aRoot, + nsIOutputStream *aStream, + const char *aCharset) { - NS_ENSURE_ARG_POINTER(root); - NS_ENSURE_ARG_POINTER(stream); + NS_ENSURE_ARG_POINTER(aRoot); + NS_ENSURE_ARG_POINTER(aStream); // The charset arg can be null, in which case we get the document's // charset and use that when serializing. - - nsCOMPtr encoder; - nsresult rv = SetUpEncoder(root,charset,getter_AddRefs(encoder)); + + nsresult rv = CheckSameOrigin(aRoot); if (NS_FAILED(rv)) return rv; - return encoder->EncodeToStream(stream); + nsCOMPtr encoder; + rv = SetUpEncoder(aRoot, aCharset, getter_AddRefs(encoder)); + if (NS_FAILED(rv)) + return rv; + + return encoder->EncodeToStream(aStream); }