Closed Bug 307980 Opened 19 years ago Closed 19 years ago

Security error when using evalInSandbox on


(Core :: XPConnect, defect)

1.8 Branch
Windows XP
Not set





(Reporter: boogs, Assigned: mrbkap)


(Keywords: fixed1.8)


(3 files)

User-Agent:       Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8b4) Gecko/20050908 Firefox/1.4
Build Identifier: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8b4) Gecko/20050908 Firefox/1.4

I get a security error when trying to access window.alert through a sandbox with
evalInSandbox on, but not on other domains.

The sandbox's codebase is set to the URL of _content. And I am accessing alert
through something like window.alert("hi") where window is sandbox.window = _content.

Here it is in code:

var box = new Components.utils.Sandbox(url);
box.window = _content;
Components.utils.evalInSandbox("window.alert('hello from: ' +
window.location.href)", box);

Reproducible: Always

Steps to Reproduce:
1. Drop the attachment into <installdir>/components/ and have Firefox autoregister
2. You should get alerts with the URL of every non-chrome window loaded
3. navigate to, note alert
4. navigate to, note alert
5. navigate to, note no alert from (the one from
doubleclick doesn't count, we're looking for the one from the main page, not the
ad iframe). open JS console and note the security error.

Actual Results:  
Security error in JS console:

'Permission denied to get property Window.alert'

Expected Results:  
alert box with: "hello from"

I'm putting this as Major because it prevents Greasemonkey from working properly
on all sites. Its major to me anyway.
forgot the testcase attachment when i filed the bug
Component: General → XPConnect
Product: Firefox → Core
Version: unspecified → 1.8 Branch
Assignee: nobody → dbradley
QA Contact: general → pschwartau
Felt like I should add the entire text of the error from the console incase it's
not easy to reproduce using my testcase:

Error: [Exception... "Component returned failure code: 0x80004003
(NS_ERROR_INVALID_POINTER) [nsIDOMLocation.replace]"  nsresult: "0x80004003
(NS_ERROR_INVALID_POINTER)"  location: "JS frame ::
file:///C:/PROGRA~1/DEERPA~3/components/ypSandboxTestCase.js :: <TOP_LEVEL> ::
line 34"  data: no]
Source File: file:///C:/PROGRA~1/DEERPA~3/components/ypSandboxTestCase.js
Line: 34
Actually, doesn't work on yahoo either - same problem. Looks like also
sets it's document.domain property.
mrbkap, this one looks like yours, at a glance.

Ever confirmed: true
It's currently impossible to do what you want in the face of setting
document.domain. To fix this, we're extending the interface of evalInSandbox to
allow you to pass a window instead of a URI, which will have all of the right
principals on it.

That would make the interesting bit in the testcase:

var sandbox = new Components.utils.Sandbox(webProgress.DOMWindow);
Assignee: dbradley → mrbkap
Flags: blocking1.8b5?
This allows you to pass a DOMWindow to the Sandbox constructor. diff -w for
review in a second.
That solution is totally fine with me.
Attachment #195823 - Flags: superreview?(shaver)
Attachment #195823 - Flags: review?(brendan)
Comment on attachment 195823 [details] [diff] [review]
Allow windows too -w

r=me if you use do_QueryWrappedNative instead of rolling your own, as you
pointed out to me!

Attachment #195823 - Flags: review?(brendan) → review+
Comment on attachment 195823 [details] [diff] [review]
Allow windows too -w

>+                nsCOMPtr<nsIDOMWindow> win = do_QueryInterface(wrapper->Native());
>+                CallQueryInterface(win, &sop);

Note to self: CallQueryInterface isn't null-safe, so this needs to check |win|.
Comment on attachment 195823 [details] [diff] [review]
Allow windows too -w

Attachment #195823 - Flags: superreview?(shaver) → superreview+
Fix checked into trunk.
Closed: 19 years ago
Resolution: --- → FIXED
Attachment #195823 - Flags: approval1.8b5?
Attachment #195823 - Flags: approval1.8b5? → approval1.8b5+
Flags: blocking1.8b5? → blocking1.8b5+
Fix checked into MOZILLA_1_8_BRANCH.
Keywords: fixed1.8
You need to log in before you can comment on or make changes to this bug.