www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

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:
Mchrome/content/zotero/xpcom/translation/translate_firefox.js | 35+++++++++++------------------------
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] = {}; }