1
0
mirror of https://github.com/chinchang/web-maker.git synced 2025-07-10 08:26:19 +02:00

Protect webmaker users from INFINITE LOOPS! fixes #18

This commit is contained in:
Kushagra Gour
2016-11-14 12:41:59 +05:30
parent 25f5674bf4
commit 8a82a24c7d
3 changed files with 66 additions and 7 deletions

View File

@ -334,16 +334,18 @@
var code = editur.cm.js.getValue();
cleanupErrors('js');
var ast;
if (jsMode === JsModes.JS) {
try {
esprima.parse(code, {
ast = esprima.parse(code, {
tolerant: true
});
} catch(e) {
showErrors('js', [ { lineNumber: e.lineNumber-1, message: e.description } ]);
} finally {
d.resolve(code);
utils.addInfiniteLoopProtection(ast);
d.resolve(escodegen.generate(ast));
}
} else if (jsMode === JsModes.COFFEESCRIPT) {
var coffeeCode;
@ -352,23 +354,31 @@
} catch (e) {
showErrors('js', [ { lineNumber: e.location.first_line, message: e.message } ]);
} finally {
d.resolve(coffeeCode);
ast = esprima.parse(coffeeCode, {
tolerant: true
});
utils.addInfiniteLoopProtection(ast);
d.resolve(escodegen.generate(ast));
}
} else if (jsMode === JsModes.ES6) {
try {
esprima.parse(code, {
ast = esprima.parse(code, {
tolerant: true
});
} catch(e) {
showErrors('js', [ { lineNumber: e.lineNumber-1, message: e.description } ]);
} finally {
d.resolve(Babel.transform(code, { presets: ['es2015'] }).code);
utils.addInfiniteLoopProtection(ast);
d.resolve(Babel.transform(escodegen.generate(ast), { presets: ['es2015'] }).code);
}
}
return d.promise;
}
window.previewException = function (error) {
console.error('Possible infinite loop detected.', error.stack)
}
window.onunload = function () {
saveCode('code');
};
@ -391,7 +401,7 @@
var contents = '<html>\n<head>\n' +
'<style>\n' + css + '\n</style>\n' +
'</head>\n' +
'<body>\n' + html + '\n<script>\n' + js + '\n</script></body>\n</html>';
'<body>\n' + html + '\n<script>\n' + js + '\n//# sourceURL=userscript.js</script></body>\n</html>';
var fileWritten = false;