blob: 2ec3785c92c578cc111b21b85f1c3d6e31de1bcc [file] [log] [blame]
/*
Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
if(!dojo._hasResource["dojox.secure.capability"]){
dojo._hasResource["dojox.secure.capability"]=true;
dojo.provide("dojox.secure.capability");
dojox.secure.badProps=/^__|^(apply|call|callee|caller|constructor|eval|prototype|this|unwatch|valueOf|watch)$|__$/;
dojox.secure.capability={keywords:["break","case","catch","const","continue","debugger","default","delete","do","else","enum","false","finally","for","function","if","in","instanceof","new","null","yield","return","switch","throw","true","try","typeof","var","void","while"],validate:function(_1,_2,_3){
var _4=this.keywords;
for(var i=0;i<_4.length;i++){
_3[_4[i]]=true;
}
var _6="|this| keyword in object literal without a Class call";
var _7=[];
if(_1.match(/[\u200c-\u200f\u202a-\u202e\u206a-\u206f\uff00-\uffff]/)){
throw new Error("Illegal unicode characters detected");
}
if(_1.match(/\/\*@cc_on/)){
throw new Error("Conditional compilation token is not allowed");
}
_1=_1.replace(/\\["'\\\/bfnrtu]/g,"@").replace(/\/\/.*|\/\*[\w\W]*?\*\/|\/(\\[\/\\]|[^*\/])(\\.|[^\/\n\\])*\/[gim]*|("[^"]*")|('[^']*')/g,function(t){
return t.match(/^\/\/|^\/\*/)?" ":"0";
}).replace(/\.\s*([a-z\$_A-Z][\w\$_]*)|([;,{])\s*([a-z\$_A-Z][\w\$_]*\s*):/g,function(t,_a,_b,_c){
_a=_a||_c;
if(/^__|^(apply|call|callee|caller|constructor|eval|prototype|this|unwatch|valueOf|watch)$|__$/.test(_a)){
throw new Error("Illegal property name "+_a);
}
return (_b&&(_b+"0:"))||"~";
});
_1.replace(/([^\[][\]\}]\s*=)|((\Wreturn|\S)\s*\[\s*\+?)|([^=!][=!]=[^=])/g,function(_d){
if(!_d.match(/((\Wreturn|[=\&\|\:\?\,])\s*\[)|\[\s*\+$/)){
throw new Error("Illegal operator "+_d.substring(1));
}
});
_1=_1.replace(new RegExp("("+_2.join("|")+")[\\s~]*\\(","g"),function(_e){
return "new(";
});
function _f(_10,_11){
var _12={};
_10.replace(/#\d/g,function(b){
var _14=_7[b.substring(1)];
for(var i in _14){
if(i==_6){
throw i;
}
if(i=="this"&&_14[":method"]&&_14["this"]==1){
i=_6;
}
if(i!=":method"){
_12[i]=2;
}
}
});
_10.replace(/(\W|^)([a-z_\$A-Z][\w_\$]*)/g,function(t,a,_18){
if(_18.charAt(0)=="_"){
throw new Error("Names may not start with _");
}
_12[_18]=1;
});
return _12;
};
var _19,_1a;
function _1b(t,_1d,a,b,_20,_21){
_21.replace(/(^|,)0:\s*function#(\d)/g,function(t,a,b){
var _25=_7[b];
_25[":method"]=1;
});
_21=_21.replace(/(^|[^_\w\$])Class\s*\(\s*([_\w\$]+\s*,\s*)*#(\d)/g,function(t,p,a,b){
var _2a=_7[b];
delete _2a[_6];
return (p||"")+(a||"")+"#"+b;
});
_1a=_f(_21,_1d);
function _2b(t,a,b,_2f){
_2f.replace(/,?([a-z\$A-Z][_\w\$]*)/g,function(t,_31){
if(_31=="Class"){
throw new Error("Class is reserved");
}
delete _1a[_31];
});
};
if(_1d){
_2b(t,a,a,_20);
}
_21.replace(/(\W|^)(var) ([ \t,_\w\$]+)/g,_2b);
return (a||"")+(b||"")+"#"+(_7.push(_1a)-1);
};
do{
_19=_1.replace(/((function|catch)(\s+[_\w\$]+)?\s*\(([^\)]*)\)\s*)?{([^{}]*)}/g,_1b);
}while(_19!=_1&&(_1=_19));
_1b(0,0,0,0,0,_1);
for(i in _1a){
if(!(i in _3)){
throw new Error("Illegal reference to "+i);
}
}
}};
}