commit e8069258448a0fa072cd3429ac494b1e49025b57
parent 22c083fe6b1a1fd8623c889adce4b554544a572f
Author: Simon Kornblith <simon@simonster.com>
Date: Tue, 30 Oct 2012 02:06:06 -0400
Fix passing all arrays to sandbox
Diffstat:
1 file changed, 11 insertions(+), 24 deletions(-)
diff --git a/chrome/content/zotero/xpcom/translation/translate_firefox.js b/chrome/content/zotero/xpcom/translation/translate_firefox.js
@@ -149,7 +149,8 @@ Zotero.Translate.SandboxManager.prototype = {
*/
"importObject":function(object, passAsFirstArgument, attachTo) {
if(!attachTo) attachTo = this.sandbox.Zotero;
- var newExposedProps = false;
+ var newExposedProps = false,
+ sandbox = this.sandbox;
if(!object.__exposedProps__) newExposedProps = {};
for(var key in (newExposedProps ? object : object.__exposedProps__)) {
let localKey = key;
@@ -160,30 +161,16 @@ Zotero.Translate.SandboxManager.prototype = {
var isObject = typeof object[localKey] === "object";
if(isFunction || isObject) {
if(isFunction) {
- if(Zotero.isFx4) {
- if(passAsFirstArgument) {
- attachTo[localKey] = object[localKey].bind(object, passAsFirstArgument);
- } else {
- attachTo[localKey] = object[localKey].bind(object);
+ attachTo[localKey] = function() {
+ var args = Array.prototype.slice.apply(arguments);
+ if(passAsFirstArgument) args.unshift(passAsFirstArgument);
+ var out = object[localKey].apply(object, args);
+ if(out instanceof Array) {
+ // Copy to sandbox
+ out = sandbox.Array.prototype.slice.apply(out);
}
- } else {
- attachTo[localKey] = function() {
- if(passAsFirstArgument) {
- var args = new Array(arguments.length+1);
- args[0] = passAsFirstArgument;
- var offset = 1;
- } else {
- var args = new Array(arguments.length);
- var offset = 0;
- }
-
- for(var i=0, nArgs=arguments.length; i<nArgs; i++) {
- args[i+offset] = arguments[i];
- }
-
- return object[localKey].apply(object, args);
- };
- }
+ return out;
+ };
} else {
attachTo[localKey] = {};
}