Bug 1402896 - make the url bar strip javascript even when preceded by control characters, r?mak draft
authorGijs Kruitbosch <gijskruitbosch@gmail.com>
Mon, 25 Sep 2017 17:24:26 +0100
changeset 671100 7e9b2c3ce40e5cc286daa03f369293e02b01001e
parent 669742 5f3f19824efa14cc6db546baf59c54a0fc15ddc9
child 733410 cdb83540f07feb0cb351d45d42ffb9cef66f62ed
push id81821
push usergijskruitbosch@gmail.com
push dateWed, 27 Sep 2017 12:52:18 +0000
reviewersmak
bugs1402896
milestone58.0a1
Bug 1402896 - make the url bar strip javascript even when preceded by control characters, r?mak MozReview-Commit-ID: 5ZO8n5lfvnl
browser/base/content/browser.js
browser/base/content/test/urlbar/browser_removeUnsafeProtocolsFromURLBarPaste.js
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -6114,17 +6114,17 @@ function middleMousePaste(event) {
   event.stopPropagation();
 }
 
 function stripUnsafeProtocolOnPaste(pasteData) {
   // Don't allow pasting javascript URIs since we don't support
   // LOAD_FLAGS_DISALLOW_INHERIT_PRINCIPAL for those.
   let changed = false;
   let pasteDataNoJS = pasteData.replace(/\r?\n/g, "")
-                               .replace(/^(?:\s*javascript:)+/i,
+                               .replace(/^(?:\W*javascript:)+/i,
                                         () => {
                                                 changed = true;
                                                 return "";
                                               });
   return changed ? pasteDataNoJS : pasteData;
 }
 
 // handleDroppedLink has the following 2 overloads:
--- a/browser/base/content/test/urlbar/browser_removeUnsafeProtocolsFromURLBarPaste.js
+++ b/browser/base/content/test/urlbar/browser_removeUnsafeProtocolsFromURLBarPaste.js
@@ -2,16 +2,17 @@ function test() {
   waitForExplicitFinish();
   testNext();
 }
 
 var pairs = [
   ["javascript:", ""],
   ["javascript:1+1", "1+1"],
   ["javascript:document.domain", "document.domain"],
+  [" \u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009javascript:document.domain", "document.domain"],
   ["java\nscript:foo", "foo"],
   ["http://\nexample.com", "http://example.com"],
   ["http://\nexample.com\n", "http://example.com"],
   ["data:text/html,<body>hi</body>", "data:text/html,<body>hi</body>"],
   // Nested things get confusing because some things don't parse as URIs:
   ["javascript:javascript:alert('hi!')", "alert('hi!')"],
   ["data:data:text/html,<body>hi</body>", "data:data:text/html,<body>hi</body>"],
   ["javascript:data:javascript:alert('hi!')", "data:javascript:alert('hi!')"],