diff --git a/mozilla/content/base/src/nsContentSink.cpp b/mozilla/content/base/src/nsContentSink.cpp index 66979ca15e2..086e3ab2947 100644 --- a/mozilla/content/base/src/nsContentSink.cpp +++ b/mozilla/content/base/src/nsContentSink.cpp @@ -1540,3 +1540,178 @@ nsContentSink::ContinueInterruptedParsingAsync() NS_DispatchToCurrentThread(ev); } + +// URIs: action, href, src, longdesc, usemap, cite +PRBool +IsAttrURI(nsIAtom *aName) +{ + return (aName == nsGkAtoms::action || + aName == nsGkAtoms::href || + aName == nsGkAtoms::src || + aName == nsGkAtoms::longdesc || + aName == nsGkAtoms::usemap || + aName == nsGkAtoms::cite || + aName == nsGkAtoms::background); +} + +// +// these two lists are used by the sanitizing fragment serializers +// Thanks to Mark Pilgrim and Sam Ruby for the initial whitelist +// +nsIAtom** const kDefaultAllowedTags [] = { + &nsGkAtoms::a, + &nsGkAtoms::abbr, + &nsGkAtoms::acronym, + &nsGkAtoms::address, + &nsGkAtoms::area, + &nsGkAtoms::b, + &nsGkAtoms::bdo, + &nsGkAtoms::big, + &nsGkAtoms::blockquote, + &nsGkAtoms::br, + &nsGkAtoms::button, + &nsGkAtoms::caption, + &nsGkAtoms::center, + &nsGkAtoms::cite, + &nsGkAtoms::code, + &nsGkAtoms::col, + &nsGkAtoms::colgroup, + &nsGkAtoms::dd, + &nsGkAtoms::del, + &nsGkAtoms::dfn, + &nsGkAtoms::dir, + &nsGkAtoms::div, + &nsGkAtoms::dl, + &nsGkAtoms::dt, + &nsGkAtoms::em, + &nsGkAtoms::fieldset, + &nsGkAtoms::font, + &nsGkAtoms::form, + &nsGkAtoms::h1, + &nsGkAtoms::h2, + &nsGkAtoms::h3, + &nsGkAtoms::h4, + &nsGkAtoms::h5, + &nsGkAtoms::h6, + &nsGkAtoms::hr, + &nsGkAtoms::i, + &nsGkAtoms::img, + &nsGkAtoms::input, + &nsGkAtoms::ins, + &nsGkAtoms::kbd, + &nsGkAtoms::label, + &nsGkAtoms::legend, + &nsGkAtoms::li, + &nsGkAtoms::listing, + &nsGkAtoms::map, + &nsGkAtoms::menu, + &nsGkAtoms::nobr, + &nsGkAtoms::ol, + &nsGkAtoms::optgroup, + &nsGkAtoms::option, + &nsGkAtoms::p, + &nsGkAtoms::pre, + &nsGkAtoms::q, + &nsGkAtoms::s, + &nsGkAtoms::samp, + &nsGkAtoms::select, + &nsGkAtoms::small, + &nsGkAtoms::span, + &nsGkAtoms::strike, + &nsGkAtoms::strong, + &nsGkAtoms::sub, + &nsGkAtoms::sup, + &nsGkAtoms::table, + &nsGkAtoms::tbody, + &nsGkAtoms::td, + &nsGkAtoms::textarea, + &nsGkAtoms::tfoot, + &nsGkAtoms::th, + &nsGkAtoms::thead, + &nsGkAtoms::tr, + &nsGkAtoms::tt, + &nsGkAtoms::u, + &nsGkAtoms::ul, + &nsGkAtoms::var, + nsnull +}; + +nsIAtom** const kDefaultAllowedAttributes [] = { + &nsGkAtoms::abbr, + &nsGkAtoms::accept, + &nsGkAtoms::acceptcharset, + &nsGkAtoms::accesskey, + &nsGkAtoms::action, + &nsGkAtoms::align, + &nsGkAtoms::alt, + &nsGkAtoms::autocomplete, + &nsGkAtoms::axis, + &nsGkAtoms::background, + &nsGkAtoms::bgcolor, + &nsGkAtoms::border, + &nsGkAtoms::cellpadding, + &nsGkAtoms::cellspacing, + &nsGkAtoms::_char, + &nsGkAtoms::charoff, + &nsGkAtoms::charset, + &nsGkAtoms::checked, + &nsGkAtoms::cite, + &nsGkAtoms::_class, + &nsGkAtoms::clear, + &nsGkAtoms::cols, + &nsGkAtoms::colspan, + &nsGkAtoms::color, + &nsGkAtoms::compact, + &nsGkAtoms::coords, + &nsGkAtoms::datetime, + &nsGkAtoms::dir, + &nsGkAtoms::disabled, + &nsGkAtoms::enctype, + &nsGkAtoms::_for, + &nsGkAtoms::frame, + &nsGkAtoms::headers, + &nsGkAtoms::height, + &nsGkAtoms::href, + &nsGkAtoms::hreflang, + &nsGkAtoms::hspace, + &nsGkAtoms::id, + &nsGkAtoms::ismap, + &nsGkAtoms::label, + &nsGkAtoms::lang, + &nsGkAtoms::longdesc, + &nsGkAtoms::maxlength, + &nsGkAtoms::media, + &nsGkAtoms::method, + &nsGkAtoms::multiple, + &nsGkAtoms::name, + &nsGkAtoms::nohref, + &nsGkAtoms::noshade, + &nsGkAtoms::nowrap, + &nsGkAtoms::pointSize, + &nsGkAtoms::prompt, + &nsGkAtoms::readonly, + &nsGkAtoms::rel, + &nsGkAtoms::rev, + &nsGkAtoms::role, + &nsGkAtoms::rows, + &nsGkAtoms::rowspan, + &nsGkAtoms::rules, + &nsGkAtoms::scope, + &nsGkAtoms::selected, + &nsGkAtoms::shape, + &nsGkAtoms::size, + &nsGkAtoms::span, + &nsGkAtoms::src, + &nsGkAtoms::start, + &nsGkAtoms::summary, + &nsGkAtoms::tabindex, + &nsGkAtoms::target, + &nsGkAtoms::title, + &nsGkAtoms::type, + &nsGkAtoms::usemap, + &nsGkAtoms::valign, + &nsGkAtoms::value, + &nsGkAtoms::vspace, + &nsGkAtoms::width, + nsnull +}; diff --git a/mozilla/content/base/src/nsContentSink.h b/mozilla/content/base/src/nsContentSink.h index 8cdccef8cde..529553395de 100644 --- a/mozilla/content/base/src/nsContentSink.h +++ b/mozilla/content/base/src/nsContentSink.h @@ -302,177 +302,9 @@ protected: MOZ_TIMER_DECLARE(mWatch) }; +// sanitizing content sink whitelists +extern PRBool IsAttrURI(nsIAtom *aName); +extern nsIAtom** const kDefaultAllowedTags []; +extern nsIAtom** const kDefaultAllowedAttributes []; -// -// these two lists are used by the sanitizing fragment serializers -// Thanks to Mark Pilgrim and Sam Ruby for the initial whitelist -// -static nsIAtom** const kDefaultAllowedTags [] = { - &nsGkAtoms::a, - &nsGkAtoms::abbr, - &nsGkAtoms::acronym, - &nsGkAtoms::address, - &nsGkAtoms::area, - &nsGkAtoms::b, - &nsGkAtoms::bdo, - &nsGkAtoms::big, - &nsGkAtoms::blockquote, - &nsGkAtoms::br, - &nsGkAtoms::button, - &nsGkAtoms::caption, - &nsGkAtoms::center, - &nsGkAtoms::cite, - &nsGkAtoms::code, - &nsGkAtoms::col, - &nsGkAtoms::colgroup, - &nsGkAtoms::dd, - &nsGkAtoms::del, - &nsGkAtoms::dfn, - &nsGkAtoms::dir, - &nsGkAtoms::div, - &nsGkAtoms::dl, - &nsGkAtoms::dt, - &nsGkAtoms::em, - &nsGkAtoms::fieldset, - &nsGkAtoms::font, - &nsGkAtoms::form, - &nsGkAtoms::h1, - &nsGkAtoms::h2, - &nsGkAtoms::h3, - &nsGkAtoms::h4, - &nsGkAtoms::h5, - &nsGkAtoms::h6, - &nsGkAtoms::hr, - &nsGkAtoms::i, - &nsGkAtoms::img, - &nsGkAtoms::input, - &nsGkAtoms::ins, - &nsGkAtoms::kbd, - &nsGkAtoms::label, - &nsGkAtoms::legend, - &nsGkAtoms::li, - &nsGkAtoms::listing, - &nsGkAtoms::map, - &nsGkAtoms::menu, - &nsGkAtoms::nobr, - &nsGkAtoms::ol, - &nsGkAtoms::optgroup, - &nsGkAtoms::option, - &nsGkAtoms::p, - &nsGkAtoms::pre, - &nsGkAtoms::q, - &nsGkAtoms::s, - &nsGkAtoms::samp, - &nsGkAtoms::select, - &nsGkAtoms::small, - &nsGkAtoms::span, - &nsGkAtoms::strike, - &nsGkAtoms::strong, - &nsGkAtoms::sub, - &nsGkAtoms::sup, - &nsGkAtoms::table, - &nsGkAtoms::tbody, - &nsGkAtoms::td, - &nsGkAtoms::textarea, - &nsGkAtoms::tfoot, - &nsGkAtoms::th, - &nsGkAtoms::thead, - &nsGkAtoms::tr, - &nsGkAtoms::tt, - &nsGkAtoms::u, - &nsGkAtoms::ul, - &nsGkAtoms::var -}; - -static nsIAtom** const kDefaultAllowedAttributes [] = { - &nsGkAtoms::abbr, - &nsGkAtoms::accept, - &nsGkAtoms::acceptcharset, - &nsGkAtoms::accesskey, - &nsGkAtoms::action, - &nsGkAtoms::align, - &nsGkAtoms::alt, - &nsGkAtoms::autocomplete, - &nsGkAtoms::axis, - &nsGkAtoms::background, - &nsGkAtoms::bgcolor, - &nsGkAtoms::border, - &nsGkAtoms::cellpadding, - &nsGkAtoms::cellspacing, - &nsGkAtoms::_char, - &nsGkAtoms::charoff, - &nsGkAtoms::charset, - &nsGkAtoms::checked, - &nsGkAtoms::cite, - &nsGkAtoms::_class, - &nsGkAtoms::clear, - &nsGkAtoms::cols, - &nsGkAtoms::colspan, - &nsGkAtoms::color, - &nsGkAtoms::compact, - &nsGkAtoms::coords, - &nsGkAtoms::datetime, - &nsGkAtoms::dir, - &nsGkAtoms::disabled, - &nsGkAtoms::enctype, - &nsGkAtoms::_for, - &nsGkAtoms::frame, - &nsGkAtoms::headers, - &nsGkAtoms::height, - &nsGkAtoms::href, - &nsGkAtoms::hreflang, - &nsGkAtoms::hspace, - &nsGkAtoms::id, - &nsGkAtoms::ismap, - &nsGkAtoms::label, - &nsGkAtoms::lang, - &nsGkAtoms::longdesc, - &nsGkAtoms::maxlength, - &nsGkAtoms::media, - &nsGkAtoms::method, - &nsGkAtoms::multiple, - &nsGkAtoms::name, - &nsGkAtoms::nohref, - &nsGkAtoms::noshade, - &nsGkAtoms::nowrap, - &nsGkAtoms::pointSize, - &nsGkAtoms::prompt, - &nsGkAtoms::readonly, - &nsGkAtoms::rel, - &nsGkAtoms::rev, - &nsGkAtoms::role, - &nsGkAtoms::rows, - &nsGkAtoms::rowspan, - &nsGkAtoms::rules, - &nsGkAtoms::scope, - &nsGkAtoms::selected, - &nsGkAtoms::shape, - &nsGkAtoms::size, - &nsGkAtoms::span, - &nsGkAtoms::src, - &nsGkAtoms::start, - &nsGkAtoms::summary, - &nsGkAtoms::tabindex, - &nsGkAtoms::target, - &nsGkAtoms::title, - &nsGkAtoms::type, - &nsGkAtoms::usemap, - &nsGkAtoms::valign, - &nsGkAtoms::value, - &nsGkAtoms::vspace, - &nsGkAtoms::width -}; - -// URIs action, href, src, longdesc, usemap, cite -static -PRBool IsAttrURI(nsIAtom *aName) -{ - return (aName == nsGkAtoms::action || - aName == nsGkAtoms::href || - aName == nsGkAtoms::src || - aName == nsGkAtoms::longdesc || - aName == nsGkAtoms::usemap || - aName == nsGkAtoms::cite || - aName == nsGkAtoms::background); -} #endif // _nsContentSink_h_ diff --git a/mozilla/content/html/document/src/nsHTMLFragmentContentSink.cpp b/mozilla/content/html/document/src/nsHTMLFragmentContentSink.cpp index b4fe3d1f736..b5bbb6b6019 100644 --- a/mozilla/content/html/document/src/nsHTMLFragmentContentSink.cpp +++ b/mozilla/content/html/document/src/nsHTMLFragmentContentSink.cpp @@ -893,22 +893,21 @@ nsHTMLParanoidFragmentSink::Init() return NS_OK; } - PRUint32 size = NS_ARRAY_LENGTH(kDefaultAllowedTags); sAllowedTags = new nsTHashtable(); if (sAllowedTags) { - rv = sAllowedTags->Init(size); - for (PRUint32 i = 0; i < size && NS_SUCCEEDED(rv); i++) { + rv = sAllowedTags->Init(80); + for (PRUint32 i = 0; kDefaultAllowedTags[i] && NS_SUCCEEDED(rv); i++) { if (!sAllowedTags->PutEntry(*kDefaultAllowedTags[i])) { rv = NS_ERROR_OUT_OF_MEMORY; } } } - size = NS_ARRAY_LENGTH(kDefaultAllowedAttributes); sAllowedAttributes = new nsTHashtable(); if (sAllowedAttributes && NS_SUCCEEDED(rv)) { - rv = sAllowedAttributes->Init(size); - for (PRUint32 i = 0; i < size && NS_SUCCEEDED(rv); i++) { + rv = sAllowedAttributes->Init(80); + for (PRUint32 i = 0; + kDefaultAllowedAttributes[i] && NS_SUCCEEDED(rv); i++) { if (!sAllowedAttributes->PutEntry(*kDefaultAllowedAttributes[i])) { rv = NS_ERROR_OUT_OF_MEMORY; } diff --git a/mozilla/content/xml/document/src/nsXMLFragmentContentSink.cpp b/mozilla/content/xml/document/src/nsXMLFragmentContentSink.cpp index 7cbbcdce9cf..a8619f2d6b4 100644 --- a/mozilla/content/xml/document/src/nsXMLFragmentContentSink.cpp +++ b/mozilla/content/xml/document/src/nsXMLFragmentContentSink.cpp @@ -513,22 +513,21 @@ nsXHTMLParanoidFragmentSink::Init() return NS_OK; } - PRUint32 size = NS_ARRAY_LENGTH(kDefaultAllowedTags); sAllowedTags = new nsTHashtable(); if (sAllowedTags) { - rv = sAllowedTags->Init(size); - for (PRUint32 i = 0; i < size && NS_SUCCEEDED(rv); i++) { + rv = sAllowedTags->Init(80); + for (PRUint32 i = 0; kDefaultAllowedTags[i] && NS_SUCCEEDED(rv); i++) { if (!sAllowedTags->PutEntry(*kDefaultAllowedTags[i])) { rv = NS_ERROR_OUT_OF_MEMORY; } } } - size = NS_ARRAY_LENGTH(kDefaultAllowedAttributes); sAllowedAttributes = new nsTHashtable(); if (sAllowedAttributes && NS_SUCCEEDED(rv)) { - rv = sAllowedAttributes->Init(size); - for (PRUint32 i = 0; i < size && NS_SUCCEEDED(rv); i++) { + rv = sAllowedAttributes->Init(80); + for (PRUint32 i = 0; + kDefaultAllowedAttributes[i] && NS_SUCCEEDED(rv); i++) { if (!sAllowedAttributes->PutEntry(*kDefaultAllowedAttributes[i])) { rv = NS_ERROR_OUT_OF_MEMORY; }