Bug 1369317 - Use net_ExtractURLScheme to parse the scheme in nsSimpleURI::SetSpec r=mcmanus draft
authorValentin Gosu <valentin.gosu@gmail.com>
Sun, 13 Aug 2017 10:03:31 +0200
changeset 645528 bc1dfc585066e09ece9511e6751cf36d33b79bef
parent 645527 b465a6bff65297c2e119c3b0a262825788f8346a
child 645529 4995b4d8a133b8568af5b130be2077ee90f8b4e4
push id73775
push uservalentin.gosu@gmail.com
push dateSun, 13 Aug 2017 08:03:58 +0000
reviewersmcmanus
bugs1369317
milestone57.0a1
Bug 1369317 - Use net_ExtractURLScheme to parse the scheme in nsSimpleURI::SetSpec r=mcmanus MozReview-Commit-ID: 11c4RS6Lomo
netwerk/base/nsSimpleURI.cpp
--- a/netwerk/base/nsSimpleURI.cpp
+++ b/netwerk/base/nsSimpleURI.cpp
@@ -286,36 +286,35 @@ nsSimpleURI::GetHasRef(bool *result)
     return NS_OK;
 }
 
 NS_IMETHODIMP
 nsSimpleURI::SetSpec(const nsACString &aSpec)
 {
     NS_ENSURE_STATE(mMutable);
 
+    nsresult rv = net_ExtractURLScheme(aSpec, mScheme);
+    if (NS_FAILED(rv)) {
+        return rv;
+    }
+    ToLowerCase(mScheme);
+
     // filter out unexpected chars "\r\n\t" if necessary
     nsAutoCString filteredSpec;
     net_FilterURIString(aSpec, filteredSpec);
 
     // nsSimpleURI currently restricts the charset to US-ASCII
     nsAutoCString spec;
-    nsresult rv = NS_EscapeURL(filteredSpec, esc_OnlyNonASCII, spec, fallible);
+    rv = NS_EscapeURL(filteredSpec, esc_OnlyNonASCII, spec, fallible);
     if (NS_FAILED(rv)) {
       return rv;
     }
 
     int32_t colonPos = spec.FindChar(':');
-    if (colonPos < 0 || !net_IsValidScheme(spec.get(), colonPos))
-        return NS_ERROR_MALFORMED_URI;
-
-    mScheme.Truncate();
-    DebugOnly<int32_t> n = spec.Left(mScheme, colonPos);
-    NS_ASSERTION(n == colonPos, "Left failed");
-    ToLowerCase(mScheme);
-
+    MOZ_ASSERT(colonPos != kNotFound, "A colon should be in this string");
     // This sets mPath, mQuery and mRef.
     return SetPathQueryRefEscaped(Substring(spec, colonPos + 1),
                                   /* needsEscape = */ false);
 }
 
 NS_IMETHODIMP
 nsSimpleURI::GetScheme(nsACString &result)
 {