diff --git a/mozilla/content/base/src/nsDocument.cpp b/mozilla/content/base/src/nsDocument.cpp index 7c972c5bde3..f087808937d 100644 --- a/mozilla/content/base/src/nsDocument.cpp +++ b/mozilla/content/base/src/nsDocument.cpp @@ -4414,14 +4414,36 @@ nsresult nsDocument::CreateElem(nsIAtom *aName, nsIAtom *aPrefix, PRInt32 aNamespaceID, PRBool aDocumentDefaultType, nsIContent **aResult) { + nsresult rv; +#ifdef DEBUG + nsIParserService *parserService = nsContentUtils::GetParserServiceWeakRef(); + NS_ASSERTION(parserService, "Can't get parserService to check name."); + if (parserService) { + nsAutoString qName; + if (aPrefix) { + aPrefix->ToString(qName); + qName.Append(':'); + } + const char *name; + aName->GetUTF8String(&name); + AppendUTF8toUTF16(name, qName); + + const PRUnichar *colon; + rv = parserService->CheckQName(qName, PR_TRUE, &colon); + NS_ASSERTION(NS_SUCCEEDED(rv), + "Don't pass invalid names to nsDocument::CreateElem, " + "check caller."); + } +#endif + *aResult = nsnull; PRInt32 elementType = aDocumentDefaultType ? mDefaultElementType : aNamespaceID; nsCOMPtr nodeInfo; - nsresult rv = mNodeInfoManager->GetNodeInfo(aName, aPrefix, aNamespaceID, - getter_AddRefs(nodeInfo)); + rv = mNodeInfoManager->GetNodeInfo(aName, aPrefix, aNamespaceID, + getter_AddRefs(nodeInfo)); NS_ENSURE_SUCCESS(rv, rv); return CreateElement(nodeInfo, elementType, aResult); diff --git a/mozilla/content/base/src/nsNodeInfoManager.cpp b/mozilla/content/base/src/nsNodeInfoManager.cpp index 05268bf1f2e..741c6330632 100644 --- a/mozilla/content/base/src/nsNodeInfoManager.cpp +++ b/mozilla/content/base/src/nsNodeInfoManager.cpp @@ -172,6 +172,8 @@ nsNodeInfoManager::GetNodeInfo(nsIAtom *aName, nsIAtom *aPrefix, PRInt32 aNamespaceID, nsINodeInfo** aNodeInfo) { NS_ENSURE_ARG_POINTER(aName); + NS_ASSERTION(!aName->Equals(EmptyString()), + "Don't pass an empty string to GetNodeInfo, fix caller."); nsINodeInfo::nsNodeInfoInner tmpKey(aName, aPrefix, aNamespaceID); diff --git a/mozilla/content/html/document/src/nsHTMLDocument.cpp b/mozilla/content/html/document/src/nsHTMLDocument.cpp index 32889736101..48b7a9f64a3 100644 --- a/mozilla/content/html/document/src/nsHTMLDocument.cpp +++ b/mozilla/content/html/document/src/nsHTMLDocument.cpp @@ -4141,6 +4141,15 @@ nsHTMLDocument::CreateElem(nsIAtom *aName, nsIAtom *aPrefix, "HTML elements in an HTML document should have " "kNamespaceID_None as their namespace ID."); + if (IsXHTML() && + (aDocumentDefaultType || aNamespaceID == kNameSpaceID_XHTML)) { + nsCAutoString name, lcName; + aName->ToUTF8String(name); + ToLowerCase(name, lcName); + NS_ASSERTION(lcName.Equals(name), + "aName should be lowercase, fix caller."); + } + return nsDocument::CreateElem(aName, aPrefix, aNamespaceID, aDocumentDefaultType, aResult); } diff --git a/mozilla/editor/libeditor/base/nsEditor.cpp b/mozilla/editor/libeditor/base/nsEditor.cpp index 22d3bc6a548..69d508fdf65 100644 --- a/mozilla/editor/libeditor/base/nsEditor.cpp +++ b/mozilla/editor/libeditor/base/nsEditor.cpp @@ -5066,6 +5066,14 @@ nsEditor::CreateHTMLContent(const nsAString& aTag, nsIContent** aContent) if (!doc) return NS_ERROR_FAILURE; + // XXX Wallpaper over editor bug (editor tries to create elements with an + // empty nodename). + if (aTag.IsEmpty()) { + NS_ERROR("Don't pass an empty tag to nsEditor::CreateHTMLContent, " + "check caller."); + return NS_ERROR_FAILURE; + } + nsCOMPtr tag = do_GetAtom(aTag); if (!tag) return NS_ERROR_OUT_OF_MEMORY;