Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/utils/platforms/rhino/lib/sandbox-platform.js
blob: 552853fcd2740cbb3cc1a113ef40f6732420b7be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70

/* shared, sealed global context */

var blacklist = [
    'Packages',
    'java',
    'javax',
    'org',
    'net',
    'com',
    'edu',
    'JavaAdapter',
    'JavaImporter',
    'getClass'
];

var whitelist = [
    'Array',
    'Boolean',
    'Date',
    'Error',
    'EvalError',
    'Function',
    'Math',
    'Number',
    'Object',
    'RangeError',
    'ReferenceError',
    'InternalError',
    'RegExp',
    'String',
    'SyntaxError',
    'TypeError',
    'URIError',
    'Infinity',
    'NaN',
    'undefined',
    'decodeURI',
    'decodeURIComponent',
    'encodeURI',
    'encodeURIComponent',
    'eval',
    'isFinite',
    'isNaN',
    'parseFloat',
    'parseInt'
];

var context = new Packages.org.mozilla.javascript.Context();
var global = context.initStandardObjects(null, true);
for (var i = 0; i < blacklist.length; i++)
    delete global[blacklist[i]];
seal(global);


/* create module factories */

exports.evaluate = function (text, id) {
    // verify that the script is a program by compiling it as such
    context.compileString(text, id, 1, null);
    // return a module factory function instead though.
    return context.compileFunction(
        global,
        "function(require,exports,module,system,print){"+text+"}",
        id,
        1,
        null
    );
};