author | Carsten "Tomcat" Book <cbook@mozilla.com> |
Wed, 17 Jun 2015 15:59:45 +0200 | |
changeset 249357 | d8df8c6f33ef4b7f215cc988daa476baa5629f0a |
parent 249356 | e846fe0567c111c17ec04e580899c6b10a789763 |
child 249358 | 1da97e961c3d2c9674b4fb621ab7f6b1efe48ee3 |
push id | 28923 |
push user | ryanvm@gmail.com |
push date | Wed, 17 Jun 2015 18:57:11 +0000 |
treeherder | mozilla-central@099d6cd6725e [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
bugs | 1170274 |
milestone | 41.0a1 |
backs out | 689ce5819b24dcc8bd8491c87652c1e9ba94628d |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/dom/html/nsGenericHTMLElement.cpp +++ b/dom/html/nsGenericHTMLElement.cpp @@ -1727,44 +1727,45 @@ nsGenericHTMLElement::GetURIListAttr(nsI nsAutoString value; if (!GetAttr(kNameSpaceID_None, aAttr, value)) return NS_OK; nsIDocument* doc = OwnerDoc(); nsCOMPtr<nsIURI> baseURI = GetBaseURI(); - NS_ConvertUTF16toUTF8 str(value); - char* buffer = str.BeginWriting(); - - while (char* token = NS_strtok(" ", &buffer)) { - if (!aResult.IsEmpty()) { - aResult.Append(NS_LITERAL_STRING(" ")); + // Value contains relative URIs split on spaces (U+0020) + const char16_t *start = value.BeginReading(); + const char16_t *end = value.EndReading(); + const char16_t *iter = start; + for (;;) { + if (iter < end && *iter != ' ') { + ++iter; + } else { // iter is pointing at either end or a space + while (*start == ' ' && start < iter) + ++start; + if (iter != start) { + if (!aResult.IsEmpty()) + aResult.Append(char16_t(' ')); + const nsSubstring& uriPart = Substring(start, iter); + nsCOMPtr<nsIURI> attrURI; + nsContentUtils::NewURIWithDocumentCharset(getter_AddRefs(attrURI), + uriPart, doc, baseURI); + if (attrURI) { + nsAutoCString spec; + attrURI->GetSpec(spec); + AppendUTF8toUTF16(spec, aResult); + } else { + aResult.Append(uriPart); + } + } + start = iter = iter + 1; + if (iter >= end) + break; } - - NS_ConvertUTF8toUTF16 uriPart(token); - nsCOMPtr<nsIURI> attrURI; - nsresult rv = - nsContentUtils::NewURIWithDocumentCharset(getter_AddRefs(attrURI), - uriPart, doc, baseURI); - if (NS_FAILED(rv)) { - aResult.Append(uriPart); - continue; - } - - MOZ_ASSERT(attrURI); - - nsAutoCString spec; - rv = attrURI->GetSpec(spec); - if (NS_WARN_IF(NS_FAILED(rv))) { - aResult.Append(uriPart); - continue; - } - - AppendUTF8toUTF16(spec, aResult); } return NS_OK; } HTMLMenuElement* nsGenericHTMLElement::GetContextMenu() const {